在做一个项目时,出现问题,就是provider端数据库会不断的有数据更新, 而我们会有 应用APP注册Observer,监听数据库的变化,然后更新界面。
在界面中就包含了ImageView,每监听到一次数据库的改变,app就会重新查询,更新头像。
数据库的循环插入速度很快,那么ImageView的更新速度也就很快,自然也就出现了闪烁的现象。
在网上也查看了一些方法,并不是很有效。
将项目中使用的方法做一个备份:
大致的思想呢,就是使用TransitionDrawable来实现渐变效果。
1.ImageView获取已存在的图像Drawable
final Drawable previousDrawable = view.getDrawable();
2.判断previousDrawable 是否为null
if (previousDrawable != null) {
final Drawable[] layers = new Drawable[2];
if (previousDrawable instanceof TransitionDrawable) {
final TransitionDrawable previousTransitionDrawable =
(TransitionDrawable) previousDrawable;
layers[0] = previousTransitionDrawable.getDrawable(
previousTransitionDrawable.getNumberOfLayers() - 1);//实现渐变效果的previousDrawable
} else {
layers[0] = previousDrawable;
}
//传入新的Drawable,request为自己封装的参数,在getDrawableForBitmap中设置,最终返回新的 //Drawable
layers[1] = getDrawableForBitmap(mContext.getResources(), new Drawable(), request);
//得到新的TransitionDrawable
TransitionDrawable drawable = new TransitionDrawable(layers);
view.setImageDrawable(drawable);
//开始动画
drawable.startTransition(FADE_TRANSITION_DURATION);
}
经测试,可以有效避免闪烁问题。