在画布上绘制自定义背景的问题(Android)
问题描述:
我试图将自定义背景绘制到扩展了LinearLayout的CustomView中。在画布上绘制自定义背景的问题(Android)
这里是我的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);
我有2个问题。
首先我的自定义背景不显示,如果我不会设置任何背景,所以我在我的xml中做了android:background =“@ color/transparent”。
第二个问题是,在我通过.addView(View view)
添加了一些视图后,我的背景消失了。
我曾尝试致电invalidate()
但仍然没有。
我做错了什么?
答
为了解决我的问题,我应该添加setWillNotDraw(false);
这意味着我的视图自行绘制。 Android Dev Docs.之后,我错过了另一个调用方法:mPath.reset();
,然后在我的onDraw(Canvas canvas);
中重新绘制。就是这样。