gpt4 book ai didi

android - 如何在没有振荡运动的情况下平滑地围绕图像中心旋转位图

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:12:56 27 4
gpt4 key购买 nike

我想根据用户点击将位图图像旋转 10 度。根据大量的 stackoverflow 和谷歌答案,我尝试了各种矩阵旋转组合。

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

 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, 0, 0, getImgWidth(), getImgHeight(), matrix, true);
canvas.drawBitmap(newbmp, px - (getImgWidth()/2), py - (getImgHeight()/2), null);

}

最佳答案

这是一个例子。我把它分成了 3 个步骤。第一个平移移动位图,使其中心位于 0,0然后一个旋转,最后将位图中心移动到 Canvas 上您想要的位置。您不需要第二个位图。

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, matrix, null);

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

关于android - 如何在没有振荡运动的情况下平滑地围绕图像中心旋转位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13399173/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com