1

Я использую gridView, который отображает изображения, загруженные из папки assests.улучшить прокрутку перфорации 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

Начните с переработки ваших ячеек, не игнорируя 'convertView' в' getView() '. Помимо этого, используйте Traceview, чтобы определить, где находится ваша проблема. – CommonsWare

+0

Я начинаю. Как это сделать? –

ответ

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

Когда я использую это, действие закрывает силу –

 Смежные вопросы

  • Нет связанных вопросов^_^