【发布时间】:2014-07-08 11:10:25
【问题描述】:
我在实现此模式时遇到问题。我有一个自定义视图,上面绘制了图像。用户可以选取图像的一角并拖动它,这会导致图像旋转。
为了达到这个结果,我做了以下工作: 位图存储在一个对象中,该对象也具有角度、x、y、centerX 和 centerY 属性。
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_MOVE:
int currentX = (int) event.getX();
int currentY = (int) event.getY();
double rotationAngleRadians = Math.atan2(currentX - image.getCenterX(), image.getCenterY() - currentY);
int rotationAngleDegrees = (int) Math.toDegrees(rotationAngleRadians);
rotateMatrix.setRotate(rotationAngleDegrees , image.getCenterX(), image.getCenterX());
.....
}
然后在 onDraw 中我使用矩阵来旋转画布
@Override
protected void onDraw(Canvas canvas) {
canvas.save(Canvas.MATRIX_SAVE_FLAG);
canvas.setMatrix(rotateMatrix);
canvas.drawBitmap(image.getBitmap, image.getX(), image.getY(), imagePaint);
canvas.restore();
}
这种方法的问题如下:当用户开始拖动按钮时,整个图像“跳跃”了 25 个像素,然后开始旋转。我该如何解决这个问题?
【问题讨论】:
标签: android matrix android-custom-view ontouchlistener rotatetransform