我想画两个形状。形状1直接绘制,形状2在形状1之后的第二个形状。我的问题是当我绘制形状2时形状1消失。
在我的构造函数中,我有:
mCurrentTick = 1;
invalidate();
scheduleDraw();
然后
private void scheduleDraw() {
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
mCurrentTick++;
invalidate();
}
},1000);
}
在onDraw内部:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
drawShape(canvas, mCurrentTick);
}
drawShape是:
private void drawShape(Canvas canvas, final int tick) {
switch (tick) {
case 1:
draw1(canvas);
break;
case 2:
draw1(canvas);
draw2(canvas);
break;
绘制方法如下所示:
private Canvas draw1(Canvas canvas) {
mPath1.setFillType(Path.FillType.EVEN_ODD);
mPath1.moveTo(mTopPointA.x, mTopPointA.y);
mPath1.lineTo(mTopPointE.x, mTopPointE.y);
mPath1.lineTo(mTopPointD.x, mTopPointD.y);
mPath1.close();
canvas.drawPath(mPath1, mPaint);
}
private void draw2(Canvas canvas) {
mPath2.setFillType(Path.FillType.EVEN_ODD);
mPath2.moveTo(mTopPointA.x, mTopPointA.y);
mPath2.lineTo(mTopPointD.x, mTopPointD.y);
mPath2.lineTo(mTopPointC.x, mTopPointC.y);
mPath2.close();
canvas.drawPath(mPath2, mPaint);
}
编辑:
如果删除setFillType(Path.FillType.EVEN_ODD),似乎工作正常;
答案 0 :(得分:0)
当它失效时,它会清除画布并再次绘制所有画布。因此,对于tick为2的情况,如果你想要它同时绘制两者,我会在switch语句中交换位置而不是在案例2中有一个中断,这样它将“落到”情况1。