知道如何在加载图像时播放淡入淡出的动画吗?现在它只是闪烁到位。我正在使用 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/