绘制方法不绘制任何东西
Draw method not drawing anything
我有一个自定义视图,它有一个绘制方法,应该绘制一个覆盖屏幕的红色椭圆,但没有任何反应。我检查了我的自定义视图的 draw 方法是否被调用了。
这是class:
public class CustomView extends View {
Paint red = new Paint();
RectF ovalRec = new RectF(0,0,MainActivity.dUWidth,MainActivity.dUHeight);
public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
red.setARGB(255, 255, 0, 0);
}
protected void onDraw(Canvas canvas) {
Log.i("log_tag", "DRAWING THE OVAL");
canvas.drawOval(ovalRec, red);
super.onDraw(canvas);
}
}
在这里你可以看到 dUWidth 和 dUHeight 是什么。
public class MainActivity extends AppCompatActivity {
public static int dUWidth;
public static int dUHeight;
@Override
protected void onCreate(Bundle savedInstanceState) {
// Auto-gen code
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Getting height & width of USABLE display and setting it to Point variable.
Display display = getWindowManager().getDefaultDisplay();
Point sizeOfDisplay = new Point();
display.getSize(sizeOfDisplay);
dUWidth = sizeOfDisplay.x;
dUHeight = sizeOfDisplay.y;
}
这是它在XML中的声明:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<com.XXX.targetexercise.CustomView
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
-> setContentView()
-> 解析你的布局文件
-> 找到您的 CustomView
-> 开始创建您的 CustomView
-> 创建你的 ovalRec
-> 使用 dUWidth 和 dUHeight 为 0
-> (out of setContentView 但仍在 onCreate) 初始化 dUWidth 和 dUheight
过程的每一步都不是真实的,但我认为这样更容易理解。
因此,请在初始化 dUWidth 和 dUHeight 并调用 View.invalidate()
后尝试更新 ovalRec
。
我有一个自定义视图,它有一个绘制方法,应该绘制一个覆盖屏幕的红色椭圆,但没有任何反应。我检查了我的自定义视图的 draw 方法是否被调用了。
这是class:
public class CustomView extends View {
Paint red = new Paint();
RectF ovalRec = new RectF(0,0,MainActivity.dUWidth,MainActivity.dUHeight);
public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
red.setARGB(255, 255, 0, 0);
}
protected void onDraw(Canvas canvas) {
Log.i("log_tag", "DRAWING THE OVAL");
canvas.drawOval(ovalRec, red);
super.onDraw(canvas);
}
}
在这里你可以看到 dUWidth 和 dUHeight 是什么。
public class MainActivity extends AppCompatActivity {
public static int dUWidth;
public static int dUHeight;
@Override
protected void onCreate(Bundle savedInstanceState) {
// Auto-gen code
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Getting height & width of USABLE display and setting it to Point variable.
Display display = getWindowManager().getDefaultDisplay();
Point sizeOfDisplay = new Point();
display.getSize(sizeOfDisplay);
dUWidth = sizeOfDisplay.x;
dUHeight = sizeOfDisplay.y;
}
这是它在XML中的声明:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<com.XXX.targetexercise.CustomView
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
-> setContentView()
-> 解析你的布局文件
-> 找到您的 CustomView
-> 开始创建您的 CustomView
-> 创建你的 ovalRec
-> 使用 dUWidth 和 dUHeight 为 0
-> (out of setContentView 但仍在 onCreate) 初始化 dUWidth 和 dUheight
过程的每一步都不是真实的,但我认为这样更容易理解。
因此,请在初始化 dUWidth 和 dUHeight 并调用 View.invalidate()
后尝试更新 ovalRec
。