您的位置:首页 > 移动开发 > Android开发

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

2015-07-11 16:14 399 查看
         话不多说,先看实现效果:



       

   实现思路:
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息