5

我想将淡入动画应用到 ImageView 以创建从 url 加载的图像在下载完成时淡入的效果。

我知道如何将图像从 url 下载到 ImageView,就像在这个答案中一样,我知道如何将淡入动画应用到像这里这样的 imageView 。

这次尝试

Drawable d = ImageUtils.fetchDrawable("the url");
imageView.setImageDrawable(d);
imageView.startAnimation(fadeInAnimation);

导致闪烁效果(看,看不到,淡入看)。颠倒最后两行的顺序也会导致闪烁。

我已经用谷歌搜索并搜索了一个回调/监听器形式的解决方案 - 像这样:

imageView.setOnLoadCompleteListener...

在 ImageView 中注册加载完成事件,但我没有找到任何类似的内容。

对于如何实现此效果的解决方案,我将不胜感激。

4

3 回答 3

32

可以使用:TransitionDrawable,简单代码如下:

        // 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);
于 2013-04-04T11:55:46.873 回答
2

设置动画的 ImageView可见性INVISIBLEGONE 设置setAnimationListener。以及何时onAnimationEnd 更改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) {}
    });
于 2012-05-02T15:34:33.593 回答
0

只需使用您提到的答案的 onPostExecute 方法并在那里触发动画(当图像实际加载并准备好时):

 protected void onPostExecute(Bitmap result) {

    bmImage.setImageBitmap(result);
    Animation myFadeInAnimation = AnimationUtils.loadAnimation(context, R.anim.fadein);
    bmImage.startAnimation(myFadeInAnimation);
}
于 2021-11-15T20:13:50.510 回答