在一个方向上旋转矩阵

时间:2014-09-23 17:42:40

标签: android matrix bitmap rotation image-rotation

有没有办法让图像矩阵只在一个方向上旋转,即:反时钟?

这是我的旋转功能

void rotate(int x, int y) {

        this.matrix.postRotate((float) (this.startAngle - this.currentAngle),
                x, y);
    }

这是ma onTouch事件

case MotionEvent.ACTION_MOVE:

            ring_gear.setCurrentAngle((float) ring_gear.getAngle(
                    event.getX(), event.getY()));
            ring_gear.rotate(ring_gear.Width / 2, ring_gear.Height / 2);

            ring.setImageMatrix(ring_gear.matrix);

            ring_gear.startAngle = ring_gear.currentAngle;

1 个答案:

答案 0 :(得分:0)

你总是在做postRotate。这将前一个旋转连接到当前旋转,有效地将角度添加到每个移动事件的旋转。

如果我理解你正在尝试做的事情(将戒指移动到手指的位置),那么你只需要设置戒指的旋转,而不是添加戒指。

替换此行:

this.matrix.postRotate((float) (this.startAngle - this.currentAngle), x, y);

对此:

this.matrix.setRotation((float) (this.currentAngle), x, y);

无需连续添加角度,只需将其设置为当前角度即可。

注意:

另外,请注意角度类型转换。如果我没弄错,Matrix使用度数来计算旋转。我不确定你是如何将触摸的x / y转换为某个角度的,但是如果你正在使用Math.atan2,那么你应该记住atan2使用弧度,所以你需要确保在将角度类型传递给矩阵之前将其转换为度数。