Android - 将旋转位图绘制到 Canvas 上的特定位置

标签 android canvas matrix bitmap rotation

好吧,也许我在这里遗漏了一些东西,但我被困了几个小时。我制作了一个应用程序,用户可以在其中在图片上绘制尺寸线。现在我还想绘制一些选择点,表明该线已被选中。这些点是一个特定的位图,必须在线的末端(在箭头之后)并根据箭头旋转。我创建了一个扩展 View 的 DrawSelectionPoint 类,我可以用这样的方法旋转位图:

selectionPoint = BitmapFactory.decodeResource(context.getResources(),
                    R.drawable.selectionpoint);
Matrix matrix = new Matrix();
        matrix.postRotate((float)Math.toDegrees(angle));        
canvas.drawBitmap(selectionPoint, matrix, null);

(其中角度是线的角度)这样我的位图按照我想要的方式旋转但它被绘制在点 0,0(屏幕左上角)。

如果我用类似的东西

canvas.save();

canvas.rotate();

canvas.drawBitmap(selectionPoint, x, y, null);

canvas.restore(); 

然后我发现很难在我想要的确切位置绘制位图(因为我在旋转的 Canvas 上绘制,之后我又旋转回去)。我尝试了一些欧几里得旋转变换,但没有成功。

有什么方法可以应用矩阵旋转并给出我需要绘制位图的点吗?提前致谢!

最佳答案

假设您要绘制位图,位图的中心 将位于 (px,py) Canvas 坐标处。有一个成员变量

Matrix matrix = new Matrix();

在你的 onDraw 中:

matrix.reset();
matrix.postTranslate(-bitmap.getWidth() / 2, -bitmap.getHeight() / 2); // Centers image
matrix.postRotate(angle);
matrix.postTranslate(px, py);
canvas.drawBitmap(bitmap, matrix, null);

关于Android - 将旋转位图绘制到 Canvas 上的特定位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10765608/

相关文章:

android - 使用 Ryzen 处理器同时运行 WSL2 和 Android Studio

android - LinearLayout.LayoutParams如何使用dip...?

java - Android - 如何在 setColor 中更改颜色

canvas - Tkinter 创建图像函数错误(pyimage1 不存在)

c++ - 如何在 C++ 中对数组中的字母进行排序?

更新 numpy 矩阵的单个元素的 Pythonic 方法?

c++ - 避免矩阵复制构造函数

javascript - 服务器上的 Cordova 指纹认证

javascript - 在 FabricJS 中创建 "Tools"?

android - 始终启动没有历史记录的新 Activity 实例