幻灯片动画循环Android

时间:2014-02-06 13:34:36

标签: java android android-animation android-resources

所以我已经实现了一个代码片段,它可以在另一个thread

上完美地找到

代码如下:

    private void animate(final ImageView imageView, final int images[], final int imageIndex, final boolean forever){

    //imageView <-- The View which displays the images
    //images[] <-- Holds R references to the images to display
    //imageIndex <-- index of the first image to show in images[] 
    //forever <-- If equals true then after the last image it starts all over again with the first image resulting in an infinite loop. You have been warned.

    int fadeInDuration = 500; // Configure time values here
    int timeBetween = 3000;
    int fadeOutDuration = 1000;

    imageView.setVisibility(View.INVISIBLE); //Visible of invisible by default
    imageView.setImageResource(images[imageIndex]);

    Animation fadeIn = new AlphaAnimation(0, 1);
    fadeIn.setInterpolator(new DecelerateInterpolator()); //Add this
    fadeIn.setDuration(fadeInDuration);

    Animation fadeOut = new AlphaAnimation(1, 0);
    fadeOut.setInterpolator(new AccelerateInterpolator()); //and this
    fadeOut.setStartOffset(fadeInDuration + timeBetween);
    fadeOut.setDuration(fadeOutDuration);

    AnimationSet animation = new AnimationSet(false); //change to false
    animation.addAnimation(fadeIn);
    animation.addAnimation(fadeOut);
    animation.setRepeatCount(1);
    imageView.setAnimation(animation);

    animation.setAnimationListener(new AnimationListener() {

        @Override
        public void onAnimationEnd(Animation animation) {
            if(images.length -1 > imageIndex){
                animate(imageView, images, imageIndex + 1, forever); // Calls itself until it gets to the end of the array.
            }
            else{
                if(forever == true){
                    animate(imageView, images, 0, forever); //Calls itself to start the animation all over again in a loop if forever = true
                }
            }

        }

        @Override
        public void onAnimationRepeat(Animation animation) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onAnimationStart(Animation animation) {
            // TODO Auto-generated method stub

        }
    });
}

这个代码基本上接受一个图像数组,并创建一个带有fadeIn和FadeOut效果的幻灯片。一旦到达结束,动画就会停止。如何修改代码以永久保持动画效果?

1 个答案:

答案 0 :(得分:1)

找到解决方案的人。

只需做一点改动!在else语句中,我必须将Forever设置为false!

            else{
            if(forever == false){
                animate(imageView, images, 0, forever);
            }
        }