绘制方法不绘制任何东西

时间:2015-08-18 13:00:53

标签: android drawing

我有一个自定义视图,它有一个绘制方法,应绘制一个覆盖屏幕的红色椭圆,但没有任何事情发生。我检查了我的自定义视图的绘制方法是否被调用,它是。

这是班级:

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>

1 个答案:

答案 0 :(得分:1)

- &GT; setContentView()

- &GT;解析您的布局文件

- &GT;找到您的CustomView

- &GT;开始创建CustomView

- &GT;创建您的ovalRec

- &GT;使用dUWidth和dUHeight为0

- &GT; (在setContentView之外,但仍在onCreate中)初始化dUWidth和dUheight

这不是真正的过程的每一步,但我认为这样更容易理解。

因此,请在初始化dUWidth&amp;之后尝试更新ovalRec。 dUHeight并致电View.invalidate()