旋转中心的交叉y坐标时,android位图将翻转
我目前正在开发一个Android应用程序,它有一个绘图界面,我想在上面绘制位图。在将位图绘制到绘图表面之前,我使用画布向用户显示位图 我的问题如下: 我正在尝试使用handleMove函数实现旋转,该函数是从onTouch()调用的。以下代码计算旋转角度:旋转中心的交叉y坐标时,android位图将翻转,android,canvas,bitmap,rotation,Android,Canvas,Bitmap,Rotation,我目前正在开发一个Android应用程序,它有一个绘图界面,我想在上面绘制位图。在将位图绘制到绘图表面之前,我使用画布向用户显示位图 我的问题如下: 我正在尝试使用handleMove函数实现旋转,该函数是从onTouch()调用的。以下代码计算旋转角度: private void rotate(float deltaX, float deltaY) { if (mDrawingBitmap == null) { return; } Poi
private void rotate(float deltaX, float deltaY) {
if (mDrawingBitmap == null) {
return;
}
PointF currentPoint = new PointF(deltaX + mPreviousEventCoordinate.x,
deltaY + mPreviousEventCoordinate.y);
double previousXLength = mPreviousEventCoordinate.x - mToolPosition.x;
double currentXLength = currentPoint.x - mToolPosition.x;
double previousYLength = mPreviousEventCoordinate.y - mToolPosition.y;
double currentYLength = currentPoint.y - mToolPosition.y;
double deltaAngle = Math.atan2(currentXLength / previousYLength, currentYLength / currentYLength);
mBoxRotation = (float) (deltaAngle * 180 / Math.PI);
}
此处deltaX和deltaY是用户在屏幕上移动手指的移动距离。mToolPosition是画布的中心
private void drawBitmap(Canvas canvas) {
Paint bitmapPaint = new Paint(Paint.DITHER_FLAG);
canvas.save();
canvas.clipRect(new RectF(-mBoxWidth / 2, -mBoxHeight / 2,
mBoxWidth / 2, mBoxHeight / 2), Op.UNION);
canvas.drawBitmap(mDrawingBitmap, null, new RectF(-mBoxWidth / 2, -mBoxHeight / 2,
mBoxWidth / 2, mBoxHeight / 2), bitmapPaint);
canvas.restore();
}
此代码用于在旋转的画布上绘制位图。在调用drawBitmap(canvas)之前,我使用canvas.rotate(mBoxRotation)
旋转画布
我的问题是,如果旋转画布,使画布的左上角点与位图中心的y坐标更大,则位图翻转180°。这意味着它不能连续旋转360°
是否有可能忽略位图的方向,使其不会翻转
编辑:
此图显示位图向右旋转约100°
如果我向右旋转它,就会发生这种情况。因此,在大约130°时,图像翻转,因为顶部是底部,底部现在是顶部
为什么不将drawBitmap与Matrix param一起使用?我尝试了Matrix param,但结果并不是我所期望的。我想旋转画布并将位图剪辑到画布上,因此我不必实际旋转位图。但正如我提到的,位图然后翻转180°。对我来说,位图似乎有一个指定顶部和底部的方向。发布一两张描述你想要做什么的图片。我编辑了我的问题并添加了两个屏幕截图。在这里查看我的答案,了解使用矩阵可以做得有多简单