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

时间:2014-04-23 07:39:01

标签: android canvas bitmap rotation

我目前正在开发一款带有绘图表面的Android应用程序,我想在其上绘制位图。在绘制到绘图表面之前,我使用Canvas向用户显示位图。

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

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°

enter image description here

如果我将它向右旋转更多,就会发生这种情况。因此,在大约130°时,图像会翻转,因为顶部是底部,底部现在是顶部。

enter image description here

0 个答案:

没有答案