Android - 路径不随Canvas旋转

时间:2017-10-10 22:52:41

标签: android canvas android-canvas

我有以下代码尝试旋转路径:

//inside onDraw
switch (orientation) {
    case FACE_FRONT:
        canvas.save();
        updatePath();
        canvas.rotate(0);
        canvas.restore();
        break;
    case FACE_RIGHT:
        canvas.save();
        updatePath();
        canvas.rotate(90);
        canvas.restore();
        break;
    case FACE_REAR:
        canvas.save();
        updatePath();
        canvas.rotate(180);
        canvas.restore();
        break;
    case FACE_LEFT:
        canvas.save();
        updatePath();
        canvas.rotate(270);
        canvas.restore();
        break;
    }

    canvas.drawPath(mPath, mPaint);

public void updatePath() {
    if (mPointArray.size() > 1) {
        mPath.moveTo(mPointArray.get(0).x * scaleX, mPointArray.get(0).y * scaleX);
        for (int x = 1; x < mPointArray.size(); x++) {
            mPath.lineTo(mPointArray.get(x).x * scaleX, mPointArray.get(x).y * scaleX);
        }
    }
    mPath.offset((centerX - (tmWidth / 2)) * -scaleX, (centerY - (tmWidth / 2)) * -scaleX);
}

由于某些未知原因,我的Path不会随着Canvas一起旋转。谁能让我知道我做错了什么。

我尝试寻找其他示例,但大多数示例似乎都是使用Bitmaps而不是Paths。

1 个答案:

答案 0 :(得分:0)

为什么要调用restore()?

删除所有canvas.save()和canvas.restore()调用,你会没事的。

所以你的onDraw()里面的代码应该是这样的:

    updatePath();
    switch (orientation) {
        case FACE_FRONT:
            canvas.rotate(0);
            break;
        case FACE_RIGHT:
            canvas.rotate(90);
            break;
        case FACE_REAR:
            canvas.rotate(180);
            break;
        case FACE_LEFT:
            canvas.rotate(270);
            break;
    }
    canvas.drawPath(mPath, mPaint);