android事件分发笔记
1.SimpleOnGestureListener
遇到的问题:
自己定义一个按钮继承自Button,一开始改变按钮颜色的操作放在onTouchEvent的ATION_DOWN里触发。
这时问题来了,放在ScrollView里面,发现如果碰到按钮去滑动时,会触发按钮改变颜色,显然这是不对的。
后来查了一下,发现了SimpleOnGestureListener
重写了onDown事件和onSingleTapUp事件,代码如下
private SimpleOnGestureListener mSimpleOnGestureListener = new SimpleOnGestureListener(){ @Override public boolean onSingleTapUp(MotionEvent e) { //改变颜色只在点击的时候,如果在onDown里的话,滑动也会改变颜色 setChecked(!mIsChecked); return true; } @Override public boolean onDown(MotionEvent e) { //这里返回true才会调用onSingleTapUp return true; } };
在自定义Button里重写onTouchEvent即可
@Override public boolean onTouchEvent(MotionEvent event) { return mGestureDetector.onTouchEvent(event); }
QUOTE
1. 点击屏幕上的某项的执行流程 有两种情况,一种是时间很短,一种时间稍长
时间很短:onDown--------》onSingleTapUp--------》onSingleTapConfirmed
时间稍长:onDown--------》onShowPress------》onSingleTapUp--------》onSingleTapConfirmed
2. 长按事件
onDown--------》onShowPress------》onLongPress
3.抛:手指触动屏幕后,稍微滑动后立即松开
onDown-----》onScroll----》onScroll----》onScroll----》………----->onFling
4.拖动
onDown------》onScroll----》onScroll------》onFiling
注意:有的时候会触发onFiling,但是有的时候不会触发,个人理解是人的动作不标准所致。