在Canvas上绘制自定义背景的问题(Android)

时间:2017-09-27 16:34:35

标签: java android canvas background android-custom-view

我试图将自定义背景绘制到扩展LinearLayout的CustomView。

这是我的onDraw()方法:

int mPositionX = 0;
int mPositionY = 0;
final int viewWidth = getMeasuredWidth();
final int viewHeight = getMeasuredHeight();

mPath.moveTo(mPositionX, mPositionY);
mPositionX = viewWidth;
mPath.lineTo(mPositionX, mPositionY);
mPositionY = viewHeight;
mPath.lineTo(mPositionX, mPositionY);

//draw bottom triangles
for(int i = 0; mPositionX >= 0; i++){
    mPositionX -= HALF_BORDER_STEP;
    mPositionY = i%2 == 0 ? mPositionY - BORDER_HEIGHT : mPositionY + BORDER_HEIGHT;
    mPath.lineTo(mPositionX, mPositionY);
}

// move to left bottom corner
mPositionX = 0;
mPath.lineTo(mPositionX,mPositionY);
mPath.close();

canvas.clipPath(mPath);
canvas.drawPath(mPath, mCheckPaint);
super.draw(canvas);

我有两个问题。

首先,如果我没有设置任何背景,我的自定义背景就不会显示,所以我做了android:background =" @ color / transparent"在我的xml中。

第二个问题是,在我通过.addView(View view)添加一些观看后,我的背景消失了。

我试图打电话给invalidate(),但仍然没有。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

要解决我的问题,我应该添加setWillNotDraw(false);,这意味着我的View会自行绘制。 Android Dev Docs.在此之后,我错过了另一种方法:mPath.reset();,只需在我onDraw(Canvas canvas);中重新绘制之前调用它。