在Android

时间:2015-06-19 17:33:25

标签: android android-canvas

我想画两个形状。形状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),似乎工作正常;

1 个答案:

答案 0 :(得分:0)

当它失效时,它会清除画布并再次绘制所有画布。因此,对于tick为2的情况,如果你想要它同时绘制两者,我会在switch语句中交换位置而不是在案例2中有一个中断,这样它将“落到”情况1。