有没有办法在图像加载时播放淡入动画?现在它只是突然出现。我正在使用Volley工具包中的NetworkImageView。
此外,是否有一种方法可以在不使用ImageLoader.get( .. )的情况下设置网络图像视图上的加载和错误位图?
谢谢!
//编辑:好的,感谢您所有人的帮助,但如果我们想要完美主义者,我们应该只有在从磁盘缓存中加载时才执行动画,覆盖setImageBitmap会导致即使从 memcache 中提取也会触发动画
你想做的是将一个布尔值shouldAnimate
添加到ImageListener.onResponse中,如下所示
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
shouldAnimate
布尔值,因为根据你的逻辑,“从内存缓存中加载时不进行动画”,实际上shouldAnimate == !isImmediate
。 - Itai Hanski