Scrolling-Leistung von Gridview verbessern - Android, Leistung, Gridview, Android-Gridview, Android-Galerie

Ich verwende eine GridView, die Bilder anzeigt, die aus dem Assets-Ordner geladen wurden.

Die Gridview zeigt mehr als 50 Bilder von Assets an, aber die Leistung dieser Gridview ist sehr schlecht und hat Scroll-Zeitverzögerungen.

Der Beispielcode ist:

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;
}
}

Wie mache ich das Scrollen der gridView() glatter?

Antworten:

0 für die Antwort № 1

ConvertView enthält die wiederverwendbare Ansicht. Sie sollten überprüfen, ob es Null ist. Wenn es nicht null ist, kann eine vorherige Zeile erneut wiederverwendet werden. Hoffe, dieses Stück Code verbessert sich ein wenig. Es gibt auch ein Muster namens ViewHolder Muster, das nützlich sein wird, aber nicht für Ihren Fall.

 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;
}

Auch ich denke, die Bitmaps könnten groß sein, versuchen Sie es zu lesen http://developer.android.com/training/displaying-bitmaps/load-bitmap.html und sie optimieren.