我在实现此模式时遇到问题。我有一个自定义视图,上面有一个图像。用户可以拍摄图像的一角并将其拖动,从而导致图像旋转。
为了达到这个结果,我做了以下事情: 位图存储在一个对象中,该对象也具有angle,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像素,然后开始旋转。我该如何解决这个问题?
答案 0 :(得分:1)
当您为画布提供矩阵时,画布可能会忽略之前在其前一个矩阵中定义的翻译。
更简洁的方法是使用canvas.rotate(...)
方法,而不是使用矩阵。如果您必须使用矩阵类,请确保将其基于原始canvas.getMatrix()