80,351
社区成员
发帖
与我相关
我的任务
分享
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
lastPoint.set(event.getX(), event.getY());
break;
case MotionEvent.ACTION_UP:
break;
case MotionEvent.ACTION_POINTER_DOWN:
isPinch = true;
lastSpace = pinchSpace(event);
lastRotate = pinchRotation(event);
lastPoint = pinchCenter(event);
break;
case MotionEvent.ACTION_POINTER_UP:
isPinch = false;
break;
case MotionEvent.ACTION_MOVE:
PointF point = new PointF(event.getX(), event.getY());
if (isPinch) {
float space = pinchSpace(event);
float rotate = pinchRotation(event);
PointF center = pinchCenter(event);
matrix.postScale(space / lastSpace, space / lastSpace, center.x, center.y);
matrix.postRotate(rotate - lastRotate, center.x, center.y);
lastSpace = space;
lastRotate = rotate;
point = center;
}
float dx = point.x - lastPoint.x;
float dy = point.y - lastPoint.y;
lastPoint = point;
matrix.postTranslate(dx, dy);
invalidate();
break;
}
return true;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (mBitmap == null) {
return;
}
canvas.concat(matrix);
canvas.drawBitmap(mBitmap, 0, 0, mPaint);
drawOrigin(canvas);
}
private void drawOrigin(Canvas canvas) {
if (mOrigin != null) {
drawArrow(canvas, (float) mOrigin.x, (float) mOrigin.y, 50, (float) mOrigin.t, Color.RED);
}
}