仿陌陌注册登录引导页背景效果

         话不多说,先看实现效果:

       

   实现思路:

1、背景明显是采用gridview布局,每个item布局的最上层加上一个灰色透明遮罩层。

2、动画效果是从暗到亮再重亮到暗。

       看到动画的第一眼可能先想到的是使用渐变透明度的动画,通过AnimationSet加入两个渐变透明度动画,一个是由暗到亮,另一个是由亮到暗,结果发现动画衔接的效果不好(当第一个动画执行完后恢复到原来状态以后第二个动画才开始,效果就变成了由暗->亮->暗->亮->暗)。此路不可行,必须另辟蹊径,通过setImageAlpha()方法动态修改遮罩层的透明度来实现这个效果,同时,还需要监听动画的过程,在动画完成以后随机再启动下一个动画,如何监听呢?这里我们使用属性动画ValuAnimator的addUpdateListener来实现,关键代码如下所示:

    private void performAnimate(final ImageView target){
        isFirstStart = false;
        ValueAnimator valueAnimator = ValueAnimator.ofInt(0,255);
        valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            private int image_alpha = 255;
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                int currentValue = (int) animation.getAnimatedValue();//当前动画执行了多少
                float fraction = currentValue / 255f;//动画占整个动画的比重
                if(fraction<=0.5f){

                   //透明度由不透明到透明(即由暗到亮的过程)

                    if(image_alpha - 7 >= 0){
                        image_alpha -=7;
                    }
                }else{

                  //透明度由透明到不透明(即由亮到暗的过程)

                    if(image_alpha +7 <= 255){
                        image_alpha +=7;
                    }
                }

                if(Build.VERSION.SDK_INT <= 15){
                    target.setAlpha(image_alpha);
                }else{
                    target.setImageAlpha(image_alpha);
                }
                target.invalidate();//刷新界面
                if(currentValue == 255){
                    nextPos = random.nextInt(coverPicMap.size());//下一个动画位置
                    while(nextPos == currentPos){
                        //下一次动画位置相同时再取随机数,直到不同为止,防止同一个位置连续出现2次动画
                        nextPos = random.nextInt(coverPicMap.size());
                        break;
                    }
                    currentPos = nextPos;
                    performAnimate(coverPicMap.get(nextPos));
                }
            }
        });
        valueAnimator.setDuration(5000).start();
    }


 3、随机播放动画,使用随机函数Random随机抽取动画位置。


源码下载地址:http://download.csdn.net/detail/lmz14/8890305

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值