我试图将自定义背景绘制到扩展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()
,但仍然没有。
我做错了什么?
答案 0 :(得分:0)
要解决我的问题,我应该添加setWillNotDraw(false);
,这意味着我的View会自行绘制。 Android Dev Docs.在此之后,我错过了另一种方法:mPath.reset();
,只需在我onDraw(Canvas canvas);
中重新绘制之前调用它。