一直以来,没有写过技术博客。最近想整理一下自己学过的开源项目,通过动手加深对技术的理解
Viewflow项目介绍
Viewflow是github上很好用的横向滑动View的开源项目。他有跟android原生ListView一样的接口,在项目中能够快速运用。ListView的启发
Viewflow的设计很自然联想到能够上下滑动的ListView,因此大部分人独立去实现这样的View时,比较容易出现的想法是改造ListView。我们通常想到:- 将ListView的移动方向改变城左右滑动。
- 只显示一项数据。
View宽高计算
android View在计算宽高布局时,有onMeasure和onLayout两个方法。Viewflow中只显示一项ChildView,高度为ChildView的高度与上下padding之和,宽度为屏幕宽度;onLayout为每个childView申请布局。
滑动事件处理
android中不是单一view的滑动处理通常是onInterceptTouchEvent和onTouchEvent两个方法处理触摸事件的响应,Scroller处理视图滑动,并通过VelocityTracker处理滑动速度。Viewflow在滑动中显示什么位置的ChildView可以计算:private void snapToDestination(){
final int screenWidth = getChildWdith();
final int whichScreen = (getScrollX() + (screenWidth / 2))
/ screenWidth;
snapToScreen(whichScreen);
}
android在绘制View前,都会调用computeScroll,因此在该方法中处理ChildView切换:
@Override
public void computeScroll() {
if(mScroller.computeScrollOffset()){
scrollTo(mScroller.getCurrX(), mScroller.getCurrY());
postInvalidate();