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

前端之家收集整理的这篇文章主要介绍了如何在Android中围绕图像中心旋转位图而不会发生振荡运动前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想根据用户点击10度旋转位图图像.在众多stackoverflow和谷歌答案之后,我尝试了各种Matrix旋转组合.

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

@H_301_4@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
然后旋转,
最后将位图中心移动到画布上的所需位置.
您不需要第二个位图. @H_301_4@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.f2er.com/android/316363.html

猜你在找的Android相关文章