Adapterはピクチャ多重化を最適化し、インタフェースピクチャに点滅効果をもたらす

7070 ワード

AndroidでAdapterを使用する場合、androidの内部メカニズムに限定されるため、listviewは大量のピクチャをロードする過程で、ViewHolder多重方式を使用しないと、プログラムにOOMの問題が発生する.
以下は一般的な場合の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の高速スクロールが画像の点滅を置き換えるという別の問題に直面します.
このような効果は非常に見苦しく、ユーザーの体験が非常に悪いため、ネット上でソリューションを検索する旅を始め、多くのことを調べても見当がつかない.突然ひらめいて、宝を洗って商品を検索するのと同じように大量の画像が現れて、同じ問題に直面するはずです.
宝を洗う商品検索機能を使って、画像リストを上下にスクロールする過程で、画像は点滅する切り替えではなく、空白の画像で正しい画像に切り替わることが分かった.
問題がこんなに簡単に解決されたとは思いもよらなかった.
 
 
============
ImageLoaderが画像をロードする前に、Imageの原図を空にすると、古い図から新しい図に切り替わる点滅効果は現れません
 
 
 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     }

 
 
 
 
ブログを記録して友達を必要とするのに役立つことを望んでいます.
 
転載先:https://www.cnblogs.com/treekang/p/8963937.html