Android - Gesture Detection (Swipe up/down) on particular view

50,714

Solution 1

Do this in your onCreate method.

findViewById(R.id.tvOne).setOnTouchListener(new View.OnTouchListener() { 
            @Override
           public boolean onTouch(View v, MotionEvent event){
                return gestureScanner.onTouchEvent(event);
           }
  });

Solution 2

You can set OnTouchListeners to individual TextViews.

findViewById(R.id.tvOne).setOnTouchListener(new OnTouchListener() {

    @Override
    public boolean onTouch(View view, MotionEvent event) {
         // Your code here
    }
}
Share:
50,714
Anukool
Author by

Anukool

Updated on August 07, 2022

Comments

  • Anukool
    Anukool almost 2 years

    I am trying to implement the OnGestureListener in Android.
    I have three TextViews in my layout.
    What i am trying to achieve is to set Gesture Listener for two of the textViews .
    Here is the layout -

        <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/rlMain"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >
    
        <TextView
            android:id="@+id/tvOne"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_marginBottom="10dp"
            android:layout_marginTop="5dp"
            android:gravity="center"
            android:text="One" />
    
        <TextView
            android:id="@+id/tvTwo"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/tvOne"
            android:layout_centerHorizontal="true"
            android:layout_marginBottom="10dp"
            android:layout_marginTop="5dp"
            android:gravity="center"
            android:text="Two" />
    
        <TextView
            android:id="@+id/tvThree"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/tvTwo"
            android:layout_centerHorizontal="true"
            android:layout_marginBottom="10dp"
            android:layout_marginTop="5dp"
            android:gravity="center"
            android:text="Three" />
    
    </RelativeLayout>
    

    And here is the activity

        import android.app.Activity;
        import android.os.Bundle;
        import android.util.Log;
        import android.view.GestureDetector;
        import android.view.GestureDetector.OnGestureListener;
        import android.view.MotionEvent;
    
        public class TimeActivity extends Activity implements OnGestureListener {
    
        GestureDetector gestureScanner;
    
        @SuppressWarnings("deprecation")
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.wheelview);
            gestureScanner = new GestureDetector(this);
    
        }
    
        @Override
        public boolean onTouchEvent(MotionEvent event) {
            // TODO Auto-generated method stub
            return gestureScanner.onTouchEvent(event);
        }
    
        @Override
        public boolean onDown(MotionEvent e) {
            // TODO Auto-generated method stub
            return true;
        }
    
        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
                float velocityY) {
            // TODO Auto-generated method stub
            Log.i("Test", "On Fling");
            return true;
        }
    
        @Override
        public void onLongPress(MotionEvent e) {
            // TODO Auto-generated method stub
    
        }
    
        @Override
        public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
                float distanceY) {
            // TODO Auto-generated method stub
            return false;
        }
    
        @Override
        public void onShowPress(MotionEvent e) {
            // TODO Auto-generated method stub
    
        }
    
        @Override
        public boolean onSingleTapUp(MotionEvent e) {
            // TODO Auto-generated method stub
            return false;
        }
    }
    

    At present Fling for all the three textviews is getting called .
    Is there any way through which i can set the Gesture Listener for some particular views in the layout.
    Any help will be highly appreciated.