Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

adding touch listener for liner layout filled with buttons

I added a touch event to a linear layout to respond to swipe gestures, and it works well. However, when i add buttons to the layout, the parent liner layout is ignored. How should I prevent this from happening?

LinearLayout ln2 = (LinearLayout) findViewById(R.id.fr2);
ln2.setOnTouchListener(swipe);

How to i use onInterceptTouch?

like image 243
Evans Kakpovi Avatar asked Dec 28 '22 01:12

Evans Kakpovi


1 Answers

You should create your own layout and override onInterceptTouchEvent(MotionEvent ev) method of your layout.

For Example I created my own layout which extends RelativeLayout

       @Override
       public boolean onInterceptTouchEvent(MotionEvent ev) {
         return true; // With this i tell my layout to consume all the touch events from its childs
      }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
        // Log.d(TAG, String.format("ACTION_DOWN | x:%s y:%s", 
            break;
        case MotionEvent.ACTION_MOVE:
        //Log.d(TAG, String.format("ACTION_MOVE | x:%s y:%s", 
            break;
        case MotionEvent.ACTION_UP:
            break;
        }
        return true;
    }

And when i put a button to my layout, even i clicked that button, My Layout consumes all the touchEvent because of the onInterceptTouchEvent always returns true.

Hope this should help you

like image 53
Murat Nafiz Avatar answered Mar 16 '23 09:03

Murat Nafiz