Android Listview滑动及渐变动画

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

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值