想通过手势来快速调出侧边栏,不用点击按钮来使用
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
}