urS*_*Sus 13 android animated fadein imageview android-volley
任何想法如何在图像加载时播放动画淡入淡出?现在它只是闪烁到位.我正在使用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);
}
}
};
}
Run Code Online (Sandbox Code Playgroud)
这是一个设置位图的方法,无论它来自何处,因此您需要将其设置为false,以用于ImageLoader中的每个用法,除了
class BatchedImageRequest {
private void batchResponse(String cacheKey, BatchedImageRequest request,
final VolleyError error) {
...
container.mListener.onResponse(container, false, true);
...
}
}
Run Code Online (Sandbox Code Playgroud)
我已经为复制和粘贴用法创建了一个要点 - https://gist.github.com/ursusursus/5732521
ben*_*nvd 23
可以在此处找到CommonsWare答案的示例实现:https://gist.github.com/benvd/5683818.
使用a TransitionDrawable确实添加了一层额外的透支.如果你想避免这种情况,也许使用ViewPropertyAnimator可能有所帮助.
它的要点基本上是你的下面的代码片段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);
Run Code Online (Sandbox Code Playgroud)
任何想法如何在图像加载时播放动画淡入淡出?现在它只是闪烁到位.我正在使用Volley工具包中的NetworkImageView.
关闭袖带,创建自己的子类NetworkImageView和覆盖,setImageBitmap()以在应用图像时设置alpha动画.
另外,有没有办法在不使用ImageLoader.get(..)的情况下在网络图像视图上设置加载和错误位图?
打电话,setImageBitmap()或者setImageResource()和常规打电话一样ImageView.
这是动画NetworkImageView的实现。它使用ObjectAnimator淡入新下载的图像,而缓存的图像立即显示。实现非常简单-仅要求您重写两个NetworkImageView方法(setImageBitmap(Bitmap)和setImageUrl(String,ImageLoader)),它使用提供的ImageLoader来确定图像是否来自缓存。
public class AnimatedNetworkImageView extends NetworkImageView {
private static final int ANIM_DURATION = 500;
private boolean shouldAnimate = false;
public AnimatedNetworkImageView(Context context) {
super(context);
}
public AnimatedNetworkImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public AnimatedNetworkImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public void setImageBitmap(Bitmap bm) {
super.setImageBitmap(bm);
if(shouldAnimate) {
ObjectAnimator.ofFloat(this, "alpha", 0, 1).setDuration(ANIM_DURATION).start();
}
}
@Override
public void setImageUrl(String url, ImageLoader imageLoader) {
shouldAnimate = !imageLoader.isCached(url, 0, 0);
super.setImageUrl(url, imageLoader);
}
}
Run Code Online (Sandbox Code Playgroud)
希望这对某人有帮助!
| 归档时间: |
|
| 查看次数: |
14198 次 |
| 最近记录: |