Android Listview滑动及渐变动画

来源:互联网 发布:阿里云os3.2 系统优化 编辑:程序博客网 时间:2024/05/01 20:28

在饿了么订餐的时候发现首页的滑动动画挺不错的,在网上搜索相似的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

0 0
原创粉丝点击