我想根据用户点击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
然后旋转,
最后将位图中心移动到画布上的所需位置.
您不需要第二个位图.
我打破了它的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);