绘制方法不绘制任何东西

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