微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Android中围绕图像中心旋转位图而不会发生振荡运动

我想根据用户点击10度旋转位图图像.在众多stackoverflow和谷歌答案之后,我尝试了各种Matrix旋转组合.

然而,图像并没有像预期的那样真正旋转,并且给出了关于画布中心的旋转振动的抖动视图.为了测试,每次调用对象的绘制方法时,我都会将旋转角度增加10度(而不是点击次数).图像是一个对称的圆圈[64×64包围矩形]我希望它在屏幕中心围绕它自己的中心像一个轮子一样旋转,但它会旋转并沿着对角线向右下方移动并以振荡的方式向后移动到屏幕中心.

public void draw(Canvas canvas) {
    Matrix matrix = new Matrix();

    rotation += 10;
    float px = this.viewWidth/2;
    float py = this.viewHeight/2;
    matrix.setRotate(rotation,bitmap.getWidth()/2,bitmap.getHeight()/2);
    Bitmap newbmp = Bitmap.createBitmap(bitmap,getImgWidth(),getImgHeight(),matrix,true);
    canvas.drawBitmap(newbmp,px - (getImgWidth()/2),py - (getImgHeight()/2),null);

 }

解决方法

这是一个例子.
我打破了它的3个步骤.
一个转换移动位图,使其中心位于0,0
然后旋转,
最后将位图中心移动到画布上的所需位置.
您不需要第二个位图.
Matrix matrix = new Matrix();
rotation += 10;
float px = this.viewWidth/2;
float py = this.viewHeight/2;
matrix.postTranslate(-bitmap.getWidth()/2,-bitmap.getHeight()/2);
matrix.postRotate(rotation);
matrix.postTranslate(px,py);
canvas.drawBitmap(bitmap,null);

作为优化,在此方法之外创建一次Matrix,并通过调用matrix.reset()替换创建

原文地址:https://www.jb51.cc/android/316363.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐