Конфликты Zoomable ImageView в Dragable Parent View

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

Спасибо

Пользовательский вид:

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
    }

person Usman Rana    schedule 20.11.2018    source источник


Ответы (1)


вы можете добиться этого с помощью детектора жестов для подробной link

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;
        }
    }
person Zahoor Saleem    schedule 20.11.2018
comment
но это для получения действий в одном представлении, что, если я хочу перехватить и передать касание дочерним элементам, игнорируя onTouch родительского представления. - person Usman Rana; 22.11.2018
comment
поделитесь небольшой деталью вашего класса, где вы реализуете touchlistener - person Zahoor Saleem; 22.11.2018