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

+0

초보자입니다. 어떻게해야합니까? –

답변

0

ConvertView는 재생 된보기를 보유합니다. null인지 확인해야합니다. 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

이것을 사용하면 활동이 강제 종료됩니다. –