在饿了么订餐的时候发现首页的滑动动画挺不错的,在网上搜索相似的demo但是没有搜到。于是就自己跟着写了一个。其实并没有想象的那么复杂,下面是饿了么的实现效果。
我所实现的效果如下
要想实现这个效果思路是很重要的。它是根据listview的滚动状态来判断是否移动的,LIstview的状态有三种,分别是OnScrollListener.SCROLL_STATE_IDLE空闲状态OnScrollListener.SCROLL_STATE_FLING滚动状态OnScrollListener.SCROLL_STATE_TOUCH_SCROLL触摸后滚动。我是在Listview的触摸滚动状态下进行的向右移动并缩小和改变透明度的,然后当Listview停止滚动的时候出现与滚动时相反。
再者就是动画了,Android的动画在这里只用到了平移动画(TranslateAnimation),透明动画(AlphaAnimation)以及缩放动画(ScaleAnimation)然后使用 AnimationSet将多个动画组合在一起(AnimationSet提供了一个把多个动画组合成一个组合的机制,并可设置组中动画的时序关系,如同时播放,顺序播放等)。
首先要上的就是Listview滚动时的动画代码
private void startScroll() {
// Alpha动画0.0完全透明
AlphaAnimation aa = new AlphaAnimation(0.1f, 0.5f);
// 设置动画播放的时间 毫秒为单位
aa.setDuration(200);
// 界面停留在动画结束状态
aa.setFillAfter(true);
TranslateAnimation ta = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0f,
// 设置锚点
Animation.RELATIVE_TO_SELF, 1.0f, Animation.RELATIVE_TO_SELF,
0f, Animation.RELATIVE_TO_SELF,
1.0f);
// 显示时间
ta.setDuration(200);
// 界面停留在结束状态
ta.setFillAfter(true);
ScaleAnimation sa = new ScaleAnimation(1.0f, 0.5f, 1.0f, 0.5f,
// 设置锚点
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
0.5f);
// 显示时间
sa.setDuration(200);
// 界面停留在结束状态
sa.setFillAfter(true);
// 创建动画
AnimationSet as = new AnimationSet(true);
as.addAnimation(sa);
as.addAnimation(ta);
as.addAnimation(aa);
// 同时播放动画
as.setFillAfter(true);
img_anim.startAnimation(as);
}
当ListView为休闲状态时的代码为
private void endScroll() {
// showAlpha();
// Alpha动画0.0完全透明
AlphaAnimation aa = new AlphaAnimation(0.5f, 1.0f);
// 设置动画播放的时间 毫秒为单位
aa.setDuration(200);
// 界面停留在动画结束状态
aa.setFillAfter(true);
TranslateAnimation ta = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 1.0f,
// 设置锚点
Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF,
1.0f, Animation.RELATIVE_TO_SELF,
0f);
// 显示时间
ta.setDuration(200);
ta.setRepeatMode(Animation.REVERSE);
// 界面停留在结束状态
ta.setFillAfter(true);
ScaleAnimation sa = new ScaleAnimation(0.5f, 1.0f, 0.5f, 1.0f,
// 设置锚点
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
0.5f);
// 显示时间
sa.setDuration(200);
// 界面停留在结束状态
sa.setFillAfter(true);
// 创建动画
AnimationSet as = new AnimationSet(true);
as.addAnimation(sa);
as.addAnimation(ta);
as.addAnimation(aa);
// 同时播放动画
as.setFillAfter(true);
img_anim.startAnimation(as);
}
点击此处下载源码
如有问题请留言或加Android技术交流群 50208422如果此群已满请加Android交流群 470707794