淡出&同时淡出

时间:2016-10-14 18:24:26

标签: java android android-animation

我正在使用这部分代码来创建动画:

private void animate(final ImageView imageView, final Drawable[] 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 = 1000; // Configure time values here
        int timeBetween = 300;
        int fadeOutDuration = 1000;

        imageView.setVisibility(View.VISIBLE);    //Visible or invisible by default -
        // this will apply when the animation ends
        imageView.setImageDrawable(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 Animation.AnimationListener() {
            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) {
                        animate(imageView, images, 0, forever);  //Calls itself to start the animation all
                        // over again in a loop if forever = true
                    }
                }
            }

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

            public void onAnimationStart(Animation animation) {
                // TODO Auto-generated method stub
            }
        });
    }

这段代码有效,问题是淡入和淡出之间没有任何东西可以让你看到那些图片(白色屏幕)下的什么。 我想淡入开始淡出正在运行,所以你不会看到白色背景,但总是看到图片。 我已经尝试将 timeBetween 值更改为零(甚至是负数),这应该更改第二个动画的偏移量,这将导致动画同时开始但没有成功 - 它只会使图像消失得更快,但仍未达到要求的效果(淡入和淡出)

任何人都可以解释如何使淡入和淡出同时激活

2 个答案:

答案 0 :(得分:0)

我认为最好的方法是将两个 ImageView s放在同一个FrameLayout内,以便它们重叠(也可以使用{ {1}})。

热门RelativeLayout获取图片1。

底部ImageView获取图片2。

将顶部ImageView alpha从1设置为动画。

当顶部ImageView淡出时,底部ImageView变为可见。

动画结束后,将底部图像切换到顶部并将alpha设置回1。

在底部加载新图片

重复动画

答案 1 :(得分:0)

您好我正在寻找解决方案并找到了这个问题。

我使用Bitmaps作为我的解决方案,但我相信你可以改回来。

使用2个图像视图(未通过函数传递)

也是如此

这是我的解决方案:

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

    final ImageView imageView0 = mImageSlideShow0;
    final ImageView imageView1 = mImageSlideShow1;

    imageView0.setVisibility(View.VISIBLE);
    imageView1.setVisibility(View.VISIBLE);


    AnimationSet animationIn = null;
    AnimationSet animationOut = null;

    //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 fadeDuration = 1000; // Configure time values here

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


    Animation fadeOut = new AlphaAnimation(1, 0);
    fadeOut.setInterpolator(new AccelerateInterpolator()); // and this
    fadeOut.setStartOffset( 2 * fadeDuration);  //time that image is visible without any animations
    fadeOut.setDuration(fadeDuration);

    animationIn = new AnimationSet(false); // change to false
    animationIn.addAnimation(fadeIn);
    animationIn.setRepeatCount(1);

    animationOut = new AnimationSet(false); // change to false
    animationOut.addAnimation(fadeOut);
    animationOut.setRepeatCount(1);

    int animationInIndex = imageIndex;
    int animationOutIndex = 0;

    //if first image take last one in array
    if(imageIndex != 0)
    {
        animationOutIndex = animationInIndex - 1;
    }
    else
    {
        animationOutIndex = images.length - 1;
    }

    //select the correct fade in / fade out view
    if(mCurrentImageViewActive == 0)
    {
        //set correct image image view
        imageView0.setImageBitmap(images[animationInIndex]);
        imageView1.setImageBitmap(images[animationOutIndex]);

        //set correct animation image view
        imageView0.setAnimation(animationIn);
        imageView1.setAnimation(animationOut);

        //set next fade in view
        mCurrentImageViewActive = 1;
    }
    else
    {
        imageView1.setImageBitmap(images[animationInIndex]);
        imageView0.setImageBitmap(images[animationOutIndex]);

        imageView1.setAnimation(animationIn);
        imageView0.setAnimation(animationOut);

        //set next fade in view
        mCurrentImageViewActive = 0;
    }

    //if fade out is done call next action
    animationOut.setAnimationListener(new Animation.AnimationListener()
    {
        public void onAnimationEnd(Animation animation)
        {
            if (images.length - 1 > imageIndex)
            {
                animate(images, imageIndex + 1,forever); //Calls itself until it gets to the end of the array
            }
            else
            {
                if (forever)
                {
                    animate( images, 0,forever);  //Calls itself to start the animation all over again in a loop if forever = true
                }
            }
        }
        public void onAnimationRepeat(Animation animation) {
            // TODO Auto-generated method stub
        }
        public void onAnimationStart(Animation animation) {
            // TODO Auto-generated method stub
        }
    });
}
相关问题