在特定点旋转和平移

时间:2014-02-15 19:36:24

标签: android canvas bitmap rotation transform

我需要在特定点旋转图像,然后将其转换为屏幕上的特定点 我要旋转它的点位于图片的中心。

翻译有效,但轮换没有。

我有一个位图矢量,我正在使用Canvas和Matrix。

代码:

for (Bitmap image:images)
{
    //rotation  
    double angle=Math.toDegrees(rotation);
    Matrix matrix=new Matrix();
    matrix.postRotate((float)angle,finalMap.getWidth()/2-1,0);

    //transform     
    matrix.setTranslate(position.x,position.y);

    //print on screen       
    c.drawBitmap(image,matrix, paint);
}

2 个答案:

答案 0 :(得分:1)

尝试更改您的轮播/翻译调用(按此顺序):

matrix.setTranslate(position.x,position.y);
matrix.preRotate((float)angle,finalMap.getWidth()/2-1,0);

它无法按照您当前的方式工作的原因是,您的setTranslate()调用正在丢弃您之前执行的旋转,只是将其替换为在单位矩阵上执行的转换。以“set”前缀开头的矩阵变换方法只会应用转换,就像在它们之前没有发生任何事情一样。

如果您想阅读更多内容,这是一个有用的答案:https://stackoverflow.com/a/8197896/2464728

答案 1 :(得分:0)

旋转不是什么意思?怎么没有像你期望的那样做? 我最初想知道在y旋转点使用0。