6

好吧,也许我在这里遗漏了一些东西,但我被困了几个小时。我制作了一个应用程序,用户在图片上绘制尺寸线。现在我还想绘制一些选择点,以显示该线已被选中。这些点是一个特定的位图,必须在行尾(箭头之后)并根据箭头进行旋转。我创建了一个扩展 View 的类 DrawSelectionPoint,我可以用这样的方式旋转位图:

selectionPoint = BitmapFactory.decodeResource(context.getResources(),
                    R.drawable.selectionpoint);
Matrix matrix = new Matrix();
        matrix.postRotate((float)Math.toDegrees(angle));        
canvas.drawBitmap(selectionPoint, matrix, null);

(其中角度是线的角度)这种方式我的位图以我想要的方式旋转,但它被绘制在点 0,0(屏幕的左上角)。

如果我使用类似的东西

canvas.save();

canvas.rotate();

canvas.drawBitmap(selectionPoint, x, y, null);

canvas.restore(); 

然后我发现在我想要的确切位置绘制位图太难了(因为我在旋转的画布上绘制,然后我旋转回来)。我尝试了一些欧几里得旋转变换,但我没有运气。

有没有办法应用矩阵旋转并给出我需要绘制位图的点?先感谢您!

4

1 回答 1

21

假设您要绘制位图中心位于 (px,py) 画布坐标处的位图。有一个成员变量

Matrix matrix = new Matrix();

在你的 onDraw 中:

matrix.reset();
matrix.postTranslate(-bitmap.getWidth() / 2, -bitmap.getHeight() / 2); // Centers image
matrix.postRotate(angle);
matrix.postTranslate(px, py);
canvas.drawBitmap(bitmap, matrix, null);
于 2012-05-26T14:11:21.643 回答