Android开发中,我们经常会用到列表,列表的实现当然是采用ListView或者RecyclerView, 如果能给列表添加炫酷的载入动画,会给用户增加不小的视觉美感,比如stroll.js里面展示的那样,不过他那里面是用CSS实现的动画,在我们的native应用里,我们同样也可以实现这样的效果。开源库JazzyListView已经很好的实现了,不过我们今天来自己实现下这些效果,理解了这些动画的原理,我们就可以随心所欲的在自己的应用中添加各种炫酷的动画效果了。
转载请注明出处:http://blog.youkuaiyun.com/qinjunni2014/article/details/45912991
我们先来实现一个非常小的原型,然后再在这个原型的基础上进行添砖加瓦,这样子更容易理解些,在写这个原型之前,请大家想一想,像stroll.js 那样的动画,都是在什么时候加载的。应该是在view刚出现的时候,那我们可以在Adapter的getview函数里面去初始化动画,因为那里是创建view的地方。
方案一 在getView函数内加载动画
这个方案是可行的,但是不幸的是,在这个函数里面创建view时,我们无法知道ListView是在向上scroll,还是在向下scroll,因为很多动画在在这两种情况下是有区别的。比如Curl动画,向上scroll时是从屏幕内转出,而向下scroll时是从屏幕外开始旋转。所以在Adapter的getview里面加载动画的方案是不可行的。现在只能去监听滚动事件了。方案二,在OnScrollListener加载动画
在OnScrollListener监听器的OnScroll函数中,有一个firstVisibleItem参数,代表当前可以的第一个item的位置,如果我们将这个参数记录下来,通过比较这个参数,就知道列表是在哪个方向上滚动。
来,我们先来实现一个OnScrollListener
public class SecondActivity extends ActionBarActivity implements AbsListView.OnScrollListener {
//记录上次滚动之后的第一个可见item和最后一个item
int mFirstVisibleItem = -1;
int mLastVisibleItem = -1;
ListView mListView;
@Override
protected void onCreate(Bundle savedInstanceState