Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
旋转中心的交叉y坐标时,android位图将翻转_Android_Canvas_Bitmap_Rotation - Fatal编程技术网

旋转中心的交叉y坐标时,android位图将翻转

旋转中心的交叉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

我目前正在开发一个Android应用程序,它有一个绘图界面,我想在上面绘制位图。在将位图绘制到绘图表面之前,我使用画布向用户显示位图

我的问题如下: 我正在尝试使用handleMove函数实现旋转,该函数是从onTouch()调用的。以下代码计算旋转角度:

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°。对我来说,位图似乎有一个指定顶部和底部的方向。发布一两张描述你想要做什么的图片。我编辑了我的问题并添加了两个屏幕截图。在这里查看我的答案,了解使用矩阵可以做得有多简单