Android中滚动的实现
1.基础类View已经实现了大部分的滚动需要的基本支持
1)scrollBy,scrollTo
将View滚动到指定位置,其实就是通过记录mScrollX和mScrollY并触发重新绘制来完成
2)awakenScrollBars
触发滚动条的绘制
3)setVerticalScrollbarEnabled,setHorizontalScrollbarEnabled,setScrollbarFadingEnabled,
setHorizontalFadingEdgeEnabled,setVerticalFadingEdgeEnabled,setScrollbarStyle来控制
Scroll
4)getScrollX,getScrollY获取当前的offset
5)定义computeScroll给ViewGroup::drawChild调用,派生类如果要实现滚动效果,重载这个接口
6)和滚动比较有关的两个参数,屏幕的宽和高,getHeight(),getWidth()
7)onScrollChanged通知滚动result,派生类可以重载,对滚动result作出响应
2.通常引进Scroller或者类似的机制来实现平滑的滚动效果(比如滑屏操作)
1)通过Scroller::startScroll或者Scroller::fling初始化起始坐标,duration等
2)在类的computeScroll中调用Scroller::computeScrollOffset来计算即时的位置mCurrX,mCurrY,将这两个
值赋给mScrollX,mScrollY。因为是自己修改mScrollX和mScrollY而不是通过View的scrollTo,scrollBy,所以
自动调用onScrollChanged
3)调用invalidate或者postInvalidate来触发刷屏操作,重新绘制的时候因为mScrollX和mScrollY的改变,实现
了滑动的效果
3.程序设计上一般结合onInteceptTouchEvent和onTouchEvent
如果ActionDown后再来ActionMove,且两者坐标出现移动,则让程序进入Scrolling状态,在ActionMove的时候调用scrollTo或者scrollBy
如果ActionDown后来ActionUp,且速度超过指定速度,则进行fling操作