Конфликты масштабируемого ImageView в Dragable Parent View - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть активность, у которой есть ViewPager, и каждая страница имеет фрагмент с Zoomable imageView.Я реализовал функцию перетаскивания, чтобы закрыть объект, используя метод onTouch в родительском представлении масштабируемого изображения, и перетаскивание работает нормально.Но я хочу проверить, обнаружены ли 2 фигуры в dispatchTouchEvent, а затем игнорировать метод onTouch и передать касание дочерним видам, чтобы я мог увеличить изображение.Я попытался написать класс следующим образом, но он не работает.Как я могу решить проблему?Таким образом, масштабирование и перетаскивание не конфликтуют друг с другом.

Спасибо

CustomView:

public class DraggableRelativeLayout extends RelativeLayout {
    private final int THRESHOLD = ScreenUtils.dpToPx(10);
    float diffX, diffY;
    private float initialXValue;
    private float initialYValue;

    public DraggableRelativeLayout(Context context) {
        super(context);
    }

    public DraggableRelativeLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public DraggableRelativeLayout(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    public DraggableRelativeLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {

        switch (ev.getAction()) {
            case MotionEvent.ACTION_DOWN:
                initialXValue = ev.getX();
                initialYValue = ev.getY();
                // return false;
                break;
            case MotionEvent.ACTION_MOVE:
                diffX = ev.getX() - initialXValue;
                diffY = ev.getY() - initialYValue;

                if (Math.abs(diffY) <THRESHOLD || ev.getPointerCount() > 1)
                    return true;
                else
                    return super.dispatchTouchEvent(ev);
                //break;
            case MotionEvent.ACTION_UP:
                break;

        }
        return super.dispatchTouchEvent(ev);
    }
}

onTouchListener:

public class PostDetailTouchListener implements View.OnTouchListener {


    public PostDetailTouchListener(Context context, View view, View viewToZoom, OnDragInteractionListener mListener) {
        dragView = view;
        dragListener = mListener;
        zoomView = viewToZoom;
     }


    @Override
    public boolean onTouch(View view2, MotionEvent event) {

        // doing my work
    }

1 Ответ

0 голосов
/ 20 ноября 2018

Вы можете достичь этого, используя детектор жестов для детализации ссылка

class GestureListener extends GestureDetector.SimpleOnGestureListener {
        @Override
        public boolean onDown(MotionEvent event) {
            return true;
        }
        @Override
        public boolean onSingleTapConfirmed(MotionEvent e) {
            return true;
        }
        @Override
        public void onLongPress(MotionEvent e) {
        }
        @Override
        public boolean onDoubleTap(MotionEvent e) {
            return true;
        }
        @Override
        public boolean onScroll(MotionEvent e1, MotionEvent e2,float distanceX, float distanceY) {
            return true;
        }
        @Override
        public boolean onFling(MotionEvent event1, MotionEvent event2,float velocityX, float velocityY) {
            return true;
        }
    }
...