1

我正在使用一個顯示從assests文件夾加載的圖像的gridView。改善gridview的滾動性能

gridview顯示來自資產的50多個圖像,但該gridview的性能非常差,並且滾動時間滯後。

的示例代碼:

protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.ameme); 

    GridView myGallery = (GridView) findViewById(R.id.gridView1); 

    mBitArray = new Bitmap[5]; 

    //This is just a sample code 

    try 
    { 
     //these images are stored in the root of "assets" 
     mBitArray[0] = getBitmapFromAsset("AM0.jpg"); 
     mBitArray[1] = getBitmapFromAsset("AM1.jpg"); 
     mBitArray[2] = getBitmapFromAsset("AM2.jpg"); 
     mBitArray[3] = getBitmapFromAsset("AM3.jpg"); 
     mBitArray[4] = getBitmapFromAsset("AM4.jpg"); 
    } 
    catch (IOException e) 
    { 
     e.printStackTrace(); 
    } 

    myGallery.setAdapter(new GalleryAdapter(this, mBitArray)); 
} 
public class GalleryAdapter extends BaseAdapter 
    { 
     private Context mContext; 
     private Bitmap[] mImageArray; 

     public GalleryAdapter(Context context, Bitmap[] imgArray) 
     { 
      mContext = context; 
      mImageArray = imgArray; 
     } 

     public int getCount() 
     { 
      return mImageArray.length; 
     } 

     public Object getItem(int position) 
     { 
      return position; 
     } 

     public long getItemId(int position) 
     { 
      return position; 
     } 
     public View getView(int position, View convertView, ViewGroup parent) 
     { 
      final ImageView imgView = new ImageView(mContext); 


      imgView.setImageBitmap(mImageArray[position]); 

      final RelativeLayout borderImg = new RelativeLayout(mContext); 

      borderImg.setPadding(8, 8, 8, 8); 
      borderImg.setGravity(Gravity.CENTER | Gravity.BOTTOM); 
      borderImg.setBackgroundColor(Color.rgb(7,35,63)); 

      borderImg.addView(imgView); 
      imgView.setLayoutParams(new RelativeLayout.LayoutParams(100,100)); 

      return borderImg; 
     } 

    } 
private Bitmap getBitmapFromAsset(String strName) throws IOException 
    { 
     AssetManager assetManager = getAssets(); 

     InputStream istr = assetManager.open(strName); 

     Bitmap bitmap = BitmapFactory.decodeStream(istr); 
     istr.close(); 

     return bitmap; 
    } 
} 

如何讓gridView()的滾動更流暢?

+0

通過不忽略'getView()'中的'convertView'來回收您的單元格開始。除此之外,使用Traceview來確定問題所在。 – CommonsWare 2014-12-13 14:41:52

+0

我是初學者。怎麼做? – 2014-12-13 17:37:00

回答

0

ConvertView保存回收視圖。你應該檢查它是否爲null。如果它不爲空,則可以再次使用前一行。希望這段代碼稍微改進一點。還有一種叫做ViewHolder的模式,它會很有用,但不適合你的情況。

public View getView(int position, View convertView, ViewGroup parent) 
    { 

     if(convertView == null){ 

     final ImageView imgView = new ImageView(mContext); 
     final RelativeLayout borderImg = new RelativeLayout(mContext); 

     imgView.setLayoutParams(new RelativeLayout.LayoutParams(100,100)); 
     borderImg.setPadding(8, 8, 8, 8); 
     borderImg.setGravity(Gravity.CENTER | Gravity.BOTTOM); 
     borderImg.setBackgroundColor(Color.rgb(7,35,63)); 

     borderImg.addView(imgView); 

     convertView.setTag(borderImg); 

    }else{ 
     borderImg = (RelativeLayout)convertView.getTag(); 
    } 

     imgView.setImageBitmap(mImageArray[position]); 

    return borderImg; 
} 

而且我猜的位圖會很大,嘗試讀取這個http://developer.android.com/training/displaying-bitmaps/load-bitmap.html並對其進行優化。

+0

當我使用這個活動是強制關閉 – 2014-12-17 18:56:42