android-Viewflow开源项目学习

本文介绍了Android的Viewflow开源项目,它受到ListView启发,实现横向滑动效果。内容涉及View的宽高计算、滑动事件处理和ChildView缓存策略,旨在通过实践加深对技术的理解。
摘要由CSDN通过智能技术生成

一直以来,没有写过技术博客。最近想整理一下自己学过的开源项目,通过动手加深对技术的理解

Viewflow项目介绍

Viewflow是github上很好用的横向滑动View的开源项目。他有跟android原生ListView一样的接口,在项目中能够快速运用。

ListView的启发

Viewflow的设计很自然联想到能够上下滑动的ListView,因此大部分人独立去实现这样的View时,比较容易出现的想法是改造ListView。我们通常想到:
  1. 将ListView的移动方向改变城左右滑动。
  2. 只显示一项数据。
因此Viewflow很自然的是继承AdapterView。

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();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值