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

匿名 (未验证) 提交于 2019-12-03 02:06:01

问题:

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 -

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.

回答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);            }   }); 


回答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     } } 


回答3:

A suggestion

If you don't want to detect all gesture,try this class: SimpleGestureListener created by myself.

Now here are some snippets for this class's usage.

Usage

public class MainActivity extends AppCompatActivity {     private static final String TAG = "MainActivity";     private GestureDetector mDetector;     @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);         SimpleGestureListener simpleGestureListener = new SimpleGestureListener();         simpleGestureListener.setListener(new SimpleGestureListener.Listener() {             @Override             public void onScrollHorizontal(float dx) {                 Log.i(TAG,"horizontal = " +dx);             }              @Override             public void onScrollVertical(float dy) {                 Log.i(TAG,"vertical = " +dy);             }         });         mDetector = new GestureDetector(this, simpleGestureListener);     }      @Override     public boolean onTouchEvent(MotionEvent event) {         mDetector.onTouchEvent(event);         return super.onTouchEvent(event);     } } 

It can be used for detecting swiping gesture :

  • left or right
  • up or down


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!