Android中ImageView的一个奇怪之处

Android中ImageView的一个奇怪之处,android,imageview,zooming,Android,Imageview,Zooming,最近,我完成了自己的ImageView。它可以拖动或缩放,但当我将此apk安装到手机上时,当我要缩放时,此图像视图始终会抖动。(对不起,我英语不好)。谢谢您的帮助 以下是ImageView的子类: public class MyImageView extends ImageView { private MODE mode = MODE.NONE; private PointF startPoint = new PointF(); private float distance =

最近,我完成了自己的ImageView。它可以拖动或缩放,但当我将此apk安装到手机上时,当我要缩放时,此图像视图始终会抖动。(对不起,我英语不好)。谢谢您的帮助

以下是ImageView的子类:

      public class MyImageView extends ImageView {

private MODE mode = MODE.NONE; 
private PointF startPoint = new PointF(); 
private float distance = 0; 
private float scale; 
public MyImageView(Context context) {
    super(context);
    this.setPadding(10, 10, 10, 10);
    this.setScaleType(ScaleType.FIT_XY);
    this.setImageResource(R.drawable.emoji_18);
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    if (!isEnabled())
        return false;
    switch (event.getAction() & MotionEvent.ACTION_MASK) {
    case MotionEvent.ACTION_DOWN:
        mode = MODE.DRAG; 
        startPoint.set(event.getRawX(), event.getRawY());
        break;
    case MotionEvent.ACTION_MOVE:
        if (mode == MODE.DRAG) {
            drag(event);
        }
        if (mode == MODE.ZOON_ROTATION && event.getPointerCount() == 2) {
            zoon(event);
        }
        break;
    case MotionEvent.ACTION_POINTER_DOWN:
        distance = distance(event);
        scale = this.getScaleX();
        mode = MODE.ZOON_ROTATION;
        break;
    case MotionEvent.ACTION_POINTER_UP:
        mode = MODE.NONE;
        break;
    case MotionEvent.ACTION_UP:
    default:
        break;
    }
    return true;
}

private void zoon(MotionEvent event) {
    float currentDistance = distance(event);
    float currentScale = currentDistance / distance;
    currentScale = scale * currentScale;
    this.setScaleX(currentScale);
    this.setScaleY(currentScale);

}

private void drag(MotionEvent event) {
    PointF endPoint = new PointF();
    endPoint.set(event.getRawX(), event.getRawY());
    float dx = endPoint.x - startPoint.x;
    float dy = endPoint.y - startPoint.y;
    startPoint.set(endPoint);
    this.setTranslationX(this.getTranslationX() + dx);
    this.setTranslationY(this.getTranslationY() + dy);
    this.invalidate();
}

private float distance(MotionEvent event) {
    float dx = event.getX(0) - event.getX(1);
    float dy = event.getY(0) - event.getY(1);
    return FloatMath.sqrt(dx * dx + dy * dy);
}

private enum MODE {
    NONE, DRAG, ZOON_ROTATION; 
}

    }
主要活动如下:

           public class MainActivity extends Activity {

private FrameLayout frameLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.setContentView(R.layout.activity_main);
    frameLayout=(FrameLayout) findViewById(R.id.framelayout);
    MyImageView myView= new MyImageView(this);
    frameLayout.addView(myView , 300 ,300);
    myView= new MyImageView(this);
    frameLayout.addView(myView , 300 , 300);

}
      }
布局如下:

 FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" 
android:id="@+id/framelayout"
>

你想说什么?此描述不足以解决您的问题。再详细讲一讲。也不需要两次初始化MyImageView类。这只是一个示例。我想缩放imageView,但当我这样做时,imageView会抖动。主要的一点是私有void zoon(MotionEvent)方法。(谢谢,我正在提高我的英语水平)