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 - 如何动画图像加载?
- android 4中的android RadioButton问题 2022-01-01
- Android viewpager检测滑动超出范围 2022-01-01
- 如何检查发送到 Android 应用程序的 Firebase 消息的传递状态? 2022-01-01
- 想使用ViewPager,无法识别android.support.*? 2022-01-01
- 在测试浓缩咖啡时,Android设备不会在屏幕上启动活动 2022-01-01
- MalformedJsonException:在第1行第1列路径中使用JsonReader.setLenient(True)接受格式错误的JSON 2022-01-01
- 使用自定义动画时在 iOS9 上忽略 edgesForExtendedLayout 2022-01-01
- Android - 我如何找出用户有多少未读电子邮件? 2022-01-01
- 用 Swift 实现 UITextFieldDelegate 2022-01-01
- Android - 拆分 Drawable 2022-01-01