自定义控件、滑动冲突解决
View基础知识
- View的位置参数
- MotionEvent和TouchSlop对象
- VelocityTracker
- GestureDetector和Scroller对象
1. View的位置参数
原理图当在MotionEvent.ACTION_UP事件触发时,调用startScroll方法,并调用invalidate/postInvalidate方法,会导致View重绘,执行View.draw方法。在此方法中会调用View.computeScroll方法,此方法是空实现,需要我们自己处理逻辑。具体逻辑是:先判断computeScrollOffset,如果为true,表示滚动未结束。则执行scrollTo方法,再次调用postInvalidate,如此反复执行,直到结束。
computeScrollOffset方法计算了一小段时间间隔内偏移的距离,即CurrX,CurrY。并返回是否滚动结束的标记。true表示未结束,false表示结束。
View的scrollTo/scrollBy方法操作的View的内容滑动。
getScrollX返回的是View的左边缘到其内容左边缘的距离。相对于View的左边缘
getScrollY返回的是View的上边缘到其内容上边缘的距离。
如果View的内容向左滑,滑出View的左边界,getScrollX为正值,反之为负值。
如果View的内容向上滑,滑出View的上边界,getScrollY为正值,反之为负值。
网友评论