Android关于手势监听的使用

想通过手势来快速调出侧边栏,不用点击按钮来使用

1.直接上代码,特此说明一点onTouchEvent方法有可能不会正常触发,则使用dispatchTouchEvent方法监听
纠正上面的说法:Activity中的onTouchEvent事件不会触发是因为drawerLayout布局的拦截

 /**
  * 重写触摸事件
  * @param event
  * @return
  */
 @Override
 public boolean onTouchEvent(MotionEvent event) {
    
    
  return gestureDetector.onTouchEvent(event);
 }

 /**
  * 如果上面的监听方法无法正常出发,则重写下面方法
  * @param ev
  * @return
  */
 @Override
 public boolean dispatchTouchEvent(MotionEvent ev) {
    
    
  return gestureDetector.onTouchEvent(ev);
 }

完整的Java代码

public class FragmentDrawerActivity extends AppCompatActivity implements GestureDetector.OnGestureListener {
    
    //继承这个监听手势的接口
    private static final String TAG = "FragmentDrawerActivity";
    GestureDetector gestureDetector;//声明一个手势检测器对象
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fragment_drawer);
        drawerLayout = findViewById(R.id.drawerLayout);
        //实例化GestureDetector对象
        gestureDetector = new GestureDetector(this, this);
		//drawerLayout布局会拦截activity的onTouch方法
        drawerLayout.setOnTouchListener(new View.OnTouchListener() {
    
    
            @Override
            public boolean onTouch(View v, MotionEvent event) {
    
    
                onTouchEvent(event);
                return false;
            }
        });
    }
    //绑定
    @Override
    public boolean onTouchEvent(MotionEvent event) {
    
    
        return gestureDetector.onTouchEvent(event);
    }


    //region 手势监听的方法
    @Override
    public boolean onDown(MotionEvent e) {
    
    
        Log.d(TAG, "onDown:按下");
        return false;
    }

    @Override
    public void onShowPress(MotionEvent e) {
    
    
        Log.d(TAG, "onShowPress:手指按下一段时间,不过还没到长按");
    }

    @Override
    public boolean onSingleTapUp(MotionEvent e) {
    
    
        Log.d(TAG, "onSingleTapUp:手指离开屏幕的一瞬间");
        return false;
    }

    @Override
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
    
    
        Log.d(TAG, "onScroll:在触摸屏上滑动");
        return false;
    }

    @Override
    public void onLongPress(MotionEvent e) {
    
    
        Log.d(TAG, "onLongPress:长按并且没有松开");
    }

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
    
    
        Log.d(TAG, "onFling:迅速滑动,并松开");
        return false;
    }
    //endregion
}

猜你喜欢

转载自blog.csdn.net/weixin_46139477/article/details/126076652