有没有办法让图像矩阵只在一个方向上旋转,即:反时钟?
这是我的旋转功能
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;
答案 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使用弧度,所以你需要确保在将角度类型传递给矩阵之前将其转换为度数。