Обойти сенсорные события слушателя к макету - PullRequest
1 голос
/ 11 июня 2019

У меня есть LinearLayout, который содержит некоторые другие представления. Я реализовал onTouchListener поверх него и хочу переместить его жестом пользователя. но у него есть некоторые другие взгляды внутри, которые имеют там на слушателях щелчка. У меня есть ImageView и 2 кнопки в этом макете, и у этих представлений есть собственные слушатели щелчков. просто посмотрите на макет.

enter image description here

Я могу перемещать свой макет только тогда, когда пользователь нажимает на Свободное пространство, а затем начинает перетаскивать. в то время как я хочу переместить макет, даже если пользователь начинает перетаскивать из-за Imageview, btn1 или Btn2.

Я знаю, потому что BTN1,2 и ImageView настроены на нажатие, поэтому они потребляют onTouchListener из LinearLayout. Вот некоторый код touchListener

@Override
    public boolean onTouch(View mView, MotionEvent event) {
        View view = null;

        if(!(mView instanceof  LinearLayout) && !(mView instanceof RelativeLayout)){

            view = (View)(mView.getParent().getParent().getParent());
        }else{
            view = mView;
        }

        final int X = (int) event.getRawX();
        //final int Y = (int) event.getRawY();
        switch (event.getAction() & MotionEvent.ACTION_MASK) {
            case MotionEvent.ACTION_DOWN:
                RelativeLayout.LayoutParams lParams = (RelativeLayout.LayoutParams) view.getLayoutParams();
                _xDelta = X - lParams.leftMargin;

                Log.d("TTP", "X_Delta " + _xDelta + " X " + X + " left margin " + lParams.leftMargin);

                break;
            case MotionEvent.ACTION_UP:
                int notMoved = X - _xDelta;
                if(notMoved == 0){
                    Log.d("TTP", "ACTION UP ");
                    return  false;
                }


                break;
            case MotionEvent.ACTION_POINTER_DOWN:
                break;
            case MotionEvent.ACTION_POINTER_UP:
                Log.d("TTP", "POINTER UP ");
                break;
            case MotionEvent.ACTION_MOVE:
                RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) view.getLayoutParams();


                int mTotalMargin = X - _xDelta;

                boolean isMovingRight = mTotalMargin > 0;


                if ((isMovingRight && mTotalMargin < (getScreenWidth() / 2)) || (!isMovingRight && mTotalMargin > (getScreenWidth() / -2))) {

                    layoutParams.leftMargin = mTotalMargin;
                    layoutParams.rightMargin = mTotalMargin * -1;
                    view.setLayoutParams(layoutParams);
                    Log.d("TTP", "Mov X_Delta " + _xDelta + " X " + X + " getScreenWidth " + getScreenWidth() + " TotalMargin " + mTotalMargin + " " + isMovingRight);

                }

                break;

            case MotionEvent.ACTION_CANCEL:
                Log.d("TTP", "CANCEL ");

                return false;
        }

        return true;
    }

** Итак, мой вопрос - как я могу обойти операцию перетаскивания из BTN1,2 и ImageView в LinearLayout независимо от их событий щелчка. Пожалуйста, помогите мне, я застрял здесь **

...