Android-带淡入淡出的动画图像视图
我创建了以下方法来在单个ImageView中设置多个图像的动画。我的问题是图像变换是突然的,所以我现在想做的是使图像从一个渐变到下一个 那么,我如何在不创建其他图像的情况下实现这一点呢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
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();
}
}