本篇文章主要介绍了"android开发游记:RecyclerView无法添加onItemClickListener最佳的高效解决方案",主要涉及到方面的内容,对于Android开发感兴趣的同学可以参考一下:
【转自:http://blog.csdn.net/liaoinstan/article/details/51200600】
自从RecyclerView发布以...
@OverridepublicbooleanonInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
}
@OverridepublicvoidonTouchEvent(RecyclerView rv, MotionEvent e) {
}
@OverridepublicvoidonRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
}
其中第三个方法是处理触摸事件冲突的,跟我们没关系不用管它,前两个方法是不是很熟悉呢,这不就是View的事件分发机制里面的事件拦截和事件处理的两个方法吗,参数里为我们提供了触摸事件的数据MotionEvent,我们要做的就是去解析坐标点和触摸规律来识别触摸手势,然后获取触摸的是哪一个item,再执行我们的回调,听起来很复杂,但是我前面已经说过了,sdk已经为我们实现了手势的识别:
GestureDetectorCompat 就是处理手势的类:手势探测器,它比GestureDetector能更好兼容低版本的api,但使用方法是一致的,我们实例化一个手势探测器:
mGestureDetector = new GestureDetectorCompat(context,new GestureListener(){...});
我们实例化手势探测器的时候需要提供一个手势监听器:OnGestureListener,探测器识别出手势后就会回调手势监听器中对应的方法,我们就可以在回调方法中做我们想做的事情了。
sdk为我们提供了两个手势监听器:OnGestureListener,OnDoubleTapListener
OnGestureListener的回调接口如下:
//用户按下屏幕就会触发publicbooleanonDown(MotionEvent e);
//如果是按下的时间超过瞬间,而且在按下的时候没有松开或者是拖动的,那么onShowPress就会执行publicvoidonShowPress(MotionEvent e);
//一次单独的轻击抬起操作,也就是轻击一下屏幕,就是普通点击事件publicbooleanonSingleTapUp(MotionEvent e);
//在屏幕上拖动事件publicbooleanonScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY);
//长按触摸屏,超过一定时长,就会触发这个事件publicvoidonLongPress(MotionEvent e);
//滑屏,用户按下触摸屏、快速移动后松开publicbooleanonFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY);
OnDoubleTapListener的回调接口如下: