Android Volley - how to animate image loading?(Android Volley - 如何动画图像加载?)
问题描述
知道如何在图像加载时播放淡入淡出的动画吗? 现在它只是闪烁到位.我正在使用 Volley 工具包中的 NetworkImageView.
any idea how to play a fade in animation when image loads? Now it just blinks into place. I am using NetworkImageView from the Volley toolkit.
另外,有没有办法在不使用 ImageLoader.get(..) 的情况下在网络图像视图上设置加载和错误位图?
Also, is there a way to set loading and error bitmaps on the network image view without using the ImageLoader.get( .. ) ?
谢谢!
//EDIT:好的,谢谢大家,但是如果我们想成为完美主义者,我们应该只在从磁盘缓存加载时制作动画,覆盖 setImageBitmap 会导致动画消失即使从 memcache中拉出
//EDIT: Okay, thanks to you all, but if we want to be perfectionists, we should only animate if loading from disk cache, overriding setImageBitmap would case animation to go off even if pulled from memcache
你想要做的是像这样向 ImageListener.onResponse 添加一个布尔值 shouldAnimate
what you want to do is add a boolean shouldAnimate
to ImageListener.onResponse like this
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);
}
}
};
}
这是一个设置位图的方法,不管它来自哪里,所以你需要将它设置为 false 到 ImageLoader 中的每个用法,除了
this is a method that sets the bitmap, no matter where it is from, so you need to set it to false to every usage in ImageLoader except for
class BatchedImageRequest {
private void batchResponse(String cacheKey, BatchedImageRequest request,
final VolleyError error) {
...
container.mListener.onResponse(container, false, true);
...
}
}
我已经为 Copy &粘贴用法 - https://gist.github.com/ursusursus/5732521
推荐答案
CommonsWare 答案的示例实现可以在这里找到:https://gist.github.com/benvd/5683818.
Example implementation of CommonsWare's answer can be found here: https://gist.github.com/benvd/5683818.
使用 TransitionDrawable
确实增加了一层额外的过度绘制.如果您想避免这种情况,也许使用 ViewPropertyAnimator
可能会有所帮助.
Using a TransitionDrawable
does add an extra layer of overdraw. If you want to avoid that, perhaps using a ViewPropertyAnimator
might help.
它的要点基本上是在您的 setImageBitmap()
中有以下代码段:
The gist of it is basically to have the following snippet in your setImageBitmap()
:
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 - 如何动画图像加载?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Android Volley - 如何动画图像加载?
基础教程推荐
- Kivy Buildozer 无法构建 apk,命令失败:./distribute.sh -m “kivy"d 2022-01-01
- 如何在 UIImageView 中异步加载图像? 2022-01-01
- 如何在 iPhone 上显示来自 API 的 HTML 文本? 2022-01-01
- android 应用程序已发布,但在 google play 中找不到 2022-01-01
- Android:对话框关闭而不调用关闭 2022-01-01
- 如何让对象对 Cocos2D 中的触摸做出反应? 2022-01-01
- 当从同一个组件调用时,两个 IBAction 触发的顺序是什么? 2022-01-01
- 如何在没有IB的情况下将2个按钮添加到右侧的UINavigationbar? 2022-01-01
- UIWebView 委托方法 shouldStartLoadWithRequest:在 WKWebView 中等效? 2022-01-01
- 在 gmail 中为 ios 应用程序检索朋友的朋友 2022-01-01