Adapter 優化圖片複用,致使界面圖片出現閃爍效果

在android中使用Adapter,侷限與android內部機制的緣由,listview在加載大量的圖片的過程當中,若是不使用ViewHolder複用的方式,會致使程序產生OOM的問題。android

如下是通常狀況下,ViewHolder複用的用法緩存

 

 1 @Override  2     public View getView(int position, View convertView, ViewGroup parent) {  3         ViewHolder holder = null;  4         if (convertView == null) {  5             holder = new ViewHolder();  6             convertView = inflater.inflate(R.layout.item_gv_picture, null);  7             holder.iv_Picture = (ImageView) convertView  8  .findViewById(R.id.iv_Picture);  9  convertView.setTag(holder); 10  } 11         holder = (ViewHolder) convertView.getTag(); 12  ImageLoader.getInstance().displayImage( 13  bitmapEntities.get(position).getBmp(),holder.iv_Picture); 14  holder.iv_Picture.setScaleType(ScaleType.FIT_XY); 15         return convertView; 16  } 17 
18 /*控件緩存類*/
19     class ViewHolder { 20  ImageView iv_Picture; 21     }

 

 

 

可是在使用這種方式的狀況下,咱們會遇到另一個問題:listview的快速滾動,會致使圖片閃爍替換。
ide

這樣的效果十分難看,致使用戶的體驗很是差,所以開啓在網上搜索解決方案之旅,查了不少都沒有頭緒。忽然靈光一閃,想到淘寶搜索商品同樣也有大量的圖片出現,應該也會遇到相同的問題把。spa

通過使用淘寶商品檢索功能,發現圖片列表上下滾動的過程當中,圖片並不會閃爍的切換,而是用空白圖片切換到正確的圖片。code

想不到問題就這樣簡單的解決了。blog

 

 

============圖片

只要在ImageLoader加載圖片以前,先清空Image的原圖,就不會出現圖片從舊圖切換到新圖的閃爍效果了get

 

 

 1 @Override  2     public View getView(int position, View convertView, ViewGroup parent) {  3         ViewHolder holder = null;  4         if (convertView == null) {  5             holder = new ViewHolder();  6             convertView = inflater.inflate(R.layout.item_gv_picture, null);  7             holder.iv_Picture = (ImageView) convertView  8  .findViewById(R.id.iv_Picture);  9  convertView.setTag(holder); 10  } 11         holder = (ViewHolder) convertView.getTag(); 12 
13     
14     //處理因爲圖片重用,致使界面圖片閃爍效果
15         if(! bitmapEntities.get(position).equals(holder.iv_Picture.getTag())){ 16             //先將圖片置空
17  ImageLoader.getInstance().displayImage( 18                     "", holder.iv_Picture); 19 
20             //從新設置圖片
21  holder.iv_Picture.setTag(bitmapEntities.get(position)); 22  } 23 
24  holder.iv_Picture.setScaleType(ScaleType.FIT_XY); 25         return convertView; 26  } 27 
28 /*控件緩存類*/
29     class ViewHolder { 30  ImageView iv_Picture; 31     }

 

 

 

 

但願記錄下博客能夠幫助到有須要朋友。博客

相關文章
相關標籤/搜索