Android Volley - 如何动画图像加载?

标签 android imageview fadein animated android-volley

知道如何在加载图像时播放淡入淡出的动画吗?现在它只是闪烁到位。我正在使用 Volley 工具包中的 NetworkImageView。

此外,有没有一种方法可以在不使用 ImageLoader.get( .. ) 的情况下在网络 ImageView 上设置加载和错误位图?

谢谢!

//编辑:好的,谢谢大家,但如果我们想成为完美主义者,我们应该只在从磁盘缓存加载时设置动画,覆盖 setImageBitmap 会使动画消失即使从 内存缓存中拉出

你想要做的是像这样向 ImageListener.onResponse 添加一个 bool 值 shouldAnimate

public static ImageListener getImageListener(final ImageView view, final int defaultImageResId,
        final int errorImageResId) {
    return new ImageListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            if (errorImageResId != 0) {
                view.setImageResource(errorImageResId);
            }
        }

        @Override
        public void onResponse(ImageContainer response, boolean isImmediate, boolean shouldAnimate) {
            if (response.getBitmap() != null) {
                if (shouldAnimate) {
                    // ADDED
                    view.setAlpha(0f);
                    view.setImageBitmap(response.getBitmap());
                    view.animate().alpha(1f).setDuration(1000);
                    // END ADDED
                } else {
                    view.setImageBitmap(response.getBitmap());
                }
            } else if (defaultImageResId != 0) {
                view.setImageResource(defaultImageResId);
            }
        }
    };
}

这是一个设置位图的方法,不管它来自哪里,所以在ImageLoader中每次使用都需要设置为false,除了

class BatchedImageRequest {

   private void batchResponse(String cacheKey, BatchedImageRequest request,
        final VolleyError error) {
      ...
      container.mListener.onResponse(container, false, true);
      ...
   }
}

我创建了一个用于复制和粘贴的 Gist - https://gist.github.com/ursusursus/5732521

最佳答案

可在此处找到 CommonsWare 答案的示例实现:https://gist.github.com/benvd/5683818 .

使用 TransitionDrawable 确实添加了额外的 overdraw 层。如果您想避免这种情况,也许使用 ViewPropertyAnimator 可能会有所帮助。

它的要点基本上是在您的 setImageBitmap() 中包含以下 fragment :

TransitionDrawable td = new TransitionDrawable(new Drawable[]{
        new ColorDrawable(android.R.color.transparent),
        new BitmapDrawable(getContext().getResources(), bm)
});

setImageDrawable(td);
td.startTransition(FADE_IN_TIME_MS);

关于Android Volley - 如何动画图像加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16778274/

相关文章:

java - 使用多线程创建 50ms java android 的最小延迟

android - 小型 SVG ImageView 看起来模糊或 "curvy"

android - 如何自动将缺少的 xml 属性添加到 android studio 中的特定 View

java - ImageView 图像上方和下方的填充

javascript - yui3 用类添加淡入淡出效果

.delay 后 jQuery fadeIn 中断

android - 使用没有 surfaceview 或 textureview 的相机

java - Gson无法解析嵌套字符串对象

c# - 如何在 Android 的 Unity 中将 System.IO.Stream 转换为纹理?

jquery - bxslider 淡入淡出模式确实淡出,但 "pops"淡入,我做错了什么?