Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-带淡入淡出的动画图像视图_Android_Android Imageview_Android Transitions - Fatal编程技术网

Android-带淡入淡出的动画图像视图

Android-带淡入淡出的动画图像视图,android,android-imageview,android-transitions,Android,Android Imageview,Android Transitions,我创建了以下方法来在单个ImageView中设置多个图像的动画。我的问题是图像变换是突然的,所以我现在想做的是使图像从一个渐变到下一个 那么,我如何在不创建其他图像的情况下实现这一点呢 protected static void setAnimatedImagesForImageView(Context context, ImageView imageView, Uri[] imageUris, int durationMillis) { AnimationDrawable anima

我创建了以下方法来在单个ImageView中设置多个图像的动画。我的问题是图像变换是突然的,所以我现在想做的是使图像从一个渐变到下一个

那么,我如何在不创建其他图像的情况下实现这一点呢

protected static void setAnimatedImagesForImageView(Context context, ImageView imageView, Uri[] imageUris, int durationMillis) {

    AnimationDrawable animation = new AnimationDrawable();
    boolean imageAdded = false;
    Drawable drawable;
    for (int i = 0; i < imageUris.length; i++) {
        if (imageUris[i] != null) {
            drawable = getDrawable(context, imageUris[i]);
            if (drawable != null) {
                animation.addFrame(drawable, durationMillis);
                imageAdded = true;
            }
        }
    }
    if (imageAdded) {
        animation.setOneShot(false);
        imageView.setImageDrawable(animation);
        animation.start();
    }

}

public static Drawable getDrawable(Context context, Uri drawableUri) {

    if (drawableUri == null) {
        return null;
    }
    else {
        try {
            InputStream inputStream = context.getContentResolver().openInputStream(drawableUri);
            return Drawable.createFromStream(inputStream, drawableUri.toString());
        } catch (Exception e) {
            Log.e(LOG_TAG, "Could not get Drawable for Uri", e);
            return null;
        }
    }

}

问题是,您将所有图像都加载到一起,而不在它们之间提供延迟来显示动画。将此方法放入类中,并为第一张图像手动调用它loadImageimages[0];,此处的图像是一个包含所有图像的数组:

public void loadImage(int position) {

    Animation a = new AlphaAnimation(1.00f, 0.00f);

    a.setDuration(1000);
    a.setAnimationListener(new AnimationListener() {

        public void onAnimationStart(Animation animation) {

            // TODO Auto-generated method stub

        }

        public void onAnimationRepeat(Animation animation) {

            // TODO Auto-generated method stub

        }

        public void onAnimationEnd(Animation animation) {

            yourView.setBackgroundResource(images[position]);

            // Call your new created method again for your next image here.

            if(position < images.length() -1) {
                loadImage(position + 1);
            }

        }

    });

    yourView.startAnimation(a);

}

我希望它对你有用

最后,我找到了一个非常简单的解决方案——添加:

animation.setEnterFadeDuration(fadeImageDurationMillis);
animation.setExitFadeDuration(fadeImageDurationMillis);
所以我最初的方法是:

protected static void setAnimatedImagesForImageView(final Context context, ImageView imageView, Uri[] imageUris, int showImageDurationMillis, int fadeImageDurationMillis) {

    AnimationDrawable animation = new AnimationDrawable();
    animation.setEnterFadeDuration(fadeImageDurationMillis);
    animation.setExitFadeDuration(fadeImageDurationMillis);

    boolean imageAdded = false;
    for (int i = 0; i < imageUris.length; i++) {
        if (imageUris[i] != null) {
            Drawable drawable = getDrawable(context, imageUris[i]);
            animation.addFrame(drawable, showImageDurationMillis);
            imageAdded = true;
        }
    }

    if (imageAdded) {
        animation.setOneShot(false);
        imageView.setImageDrawable(animation);
        animation.start();
    }

}