2012-05-26 86 views
6

好吧,也许我错过了一些东西,但我坚持了几个小时。我制作了一个应用程序,用户在图片上绘制尺寸线。现在我想绘制一些选择点,显示该行被选中。这些点是一个特定的位图,必须位于该行的末尾(箭头之后)并按箭头旋转。我创建了扩展视图类DrawSelectionPoint,我可以用这样的旋转位图:Android - 将位图绘制到画布上的特定位置

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(); 

然后我发现它太难战平的确切位置我想该位图(因为我画上一个旋转画布,我往回旋转之后)。我尝试了一些欧几里得轮换转换,但我没有运气。

是否有一些方法来应用矩阵旋转,并给出我需要位图绘制的点?先谢谢你!

回答

18

假设您想要绘制位图的中心位于(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); 
+0

,似乎工作!非常感谢你! – george

+0

它不适合我,它与线条旋转。 –