Android:自定义视图的onTouchListener实现

Android:自定义视图的onTouchListener实现,android,canvas,view,imageview,ontouchlistener,Android,Canvas,View,Imageview,Ontouchlistener,我创建了带有一些特性的自定义ImageView,我的问题是实现上的问题。现在,视图具有拖动和缩放功能。 下面是一个例子: @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction() & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN: savedMatrix.set(m

我创建了带有一些特性的自定义ImageView,我的问题是实现上的问题。现在,视图具有拖动和缩放功能。 下面是一个例子:

@Override
public boolean onTouchEvent(MotionEvent event) {
    switch (event.getAction() & MotionEvent.ACTION_MASK) {
        case MotionEvent.ACTION_DOWN:
            savedMatrix.set(matrix);
            start.set(event.getX(), event.getY());
            mode = DRAG;
            break;
        case MotionEvent.ACTION_POINTER_DOWN:
            oldDist = spacing(event);
            if (oldDist > 10f) {
                savedMatrix.set(matrix);
                midPoint(mid, event);
                mode = ZOOM;
            }
            break;
        case MotionEvent.ACTION_UP:
            float[] values = new float[9];
            matrix.getValues(values);
        case MotionEvent.ACTION_POINTER_UP:
            mode = NONE;
            break;
        case MotionEvent.ACTION_MOVE:
            if (mode == DRAG) {
                matrix.set(savedMatrix);
                matrix.postTranslate((event.getX() - start.x),
                        (event.getY() - start.y));
            } else if (mode == ZOOM) {
                float newDist = spacing(event);
                if (newDist > 10f) {
                    matrix.set(savedMatrix);
                    float scale = newDist / oldDist;
                    //SOME CODE
                }
            }
            break;
    }
    invalidate();
    return true;
}

我想检测监听器中的fling,并在fling之后平滑地转换矩阵。如果能为我的任务提供有效的解决方案,我将不胜感激。

您可以使用手势检测器

class MyGestureListener implements GestureDetector.OnGestureListener {

    @Override
    public boolean onFling(MotionEvent event1, MotionEvent event2,
                           float velocityX, float velocityY) {
        if (event1.getY() - event2.getY() > SWIPE_MIN_DISTANCE && Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY) {
            return true; 
        } else if (event2.getY() - event1.getY() > SWIPE_MIN_DISTANCE && Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY) {
            return true; 
        }
        return true;
    }

    @Override
    public boolean onDown(MotionEvent event) {
        return true;
    }

    @Override
    public void onShowPress(MotionEvent motionEvent) {

    }

    @Override
    public boolean onSingleTapUp(MotionEvent motionEvent) {
        return false;
    }

    @Override
    public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
        return false;
    }

    @Override
    public void onLongPress(MotionEvent motionEvent) {

    }
}
你的onTouch方法

@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
    return new GestureDetectorCompat(getActivity(), new MyGestureListener()).onTouchEvent(motionEvent);
}

好的,但我必须如何设置在onFling方法中查看的X,Y坐标?event1.getY和event2.getY将为您提供X和Y坐标否,我的意思是在我们投掷图像后图像的平滑运动。我的任务是像android gallery一样创建图像视图。我想你可以添加动画来移动。