问题
I would like to apply a fade-in animation to an ImageView to create the effect that the image, which is loaded from a url, fades in when the download is completed.
I know how to download an image from a url to an ImageView, like in this answer, and I know how to apply a fade-in animation to an imageView like here.
This attempt
Drawable d = ImageUtils.fetchDrawable("the url");
imageView.setImageDrawable(d);
imageView.startAnimation(fadeInAnimation);
results in a blink effect (see, not see, fade in to see). Reversing the order of the two last lines also results in a blink.
I've googled and searched SO for a solution in the form of a callback / listener - something like this:
imageView.setOnLoadCompleteListener...
to register the loading complete event in ImageView but I haven't found anything along those lines.
I'd be grateful for any pointers to a solution on how to implement this effect.
回答1:
set the ImageView
visibility to INVISIBLE
or GONE
set setAnimationListener
on your animation. and when the onAnimationEnd
change the visibility of the ImageView
.
fadeInAnimation.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationEnd(Animation arg0) {
// let make your image visible
}
@Override
public void onAnimationRepeat(Animation animation) {}
@Override
public void onAnimationStart(Animation animation) {}
});
回答2:
You can use: TransitionDrawable, simple code as follows:
// Transition drawable with a transparent drwabale and the final bitmap
final TransitionDrawable td =
new TransitionDrawable(new Drawable[] {
new ColorDrawable(Color.TRANSPARENT),
new BitmapDrawable(mResources, bitmap)
});
// Set background to loading bitmap
imageView.setBackgroundDrawable(
new BitmapDrawable(mResources, mLoadingBitmap));
imageView.setImageDrawable(td);
td.startTransition(FADE_IN_TIME);
来源:https://stackoverflow.com/questions/10416871/how-to-fade-in-picture-in-imageview-loaded-from-url