Android Imagview快速设置、切换图像时,闪烁的问题解决

来源:互联网 发布:sql server 2008服务器 编辑:程序博客网 时间:2024/06/07 05:20

在做一个项目时,出现问题,就是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);
        } 


经测试,可以有效避免闪烁问题。

0 0
原创粉丝点击