![](/img/trans.png)
[英]Android: GridView with images, how set dynamic size and improve performance
[英]How to improve gridview performance (android)
如何提高我的 gridView 性能? 滾動不流暢。
這是我的代碼:
public View getView(final int position, View convertView, ViewGroup parent) {
View MyView;
// Inflate the layout
LayoutInflater li = ((Activity) MyContext).getLayoutInflater();
MyView = li.inflate(R.layout.gallery_adapter, null);
ImageButton imageFolders = (ImageButton) MyView.findViewById(R.id.folder);
try {
imageFolders.setImageBitmap(bMap);
imageFolders.setOnClickListener(this);
imageFolders.setId(products.get(position).getId());
} catch (Exception e) {
}
MyView.setLayoutParams(70, 70);
return MyView;
}
我在這個 gridView 上有 200 張圖片,但性能非常非常糟糕。
你可以像這樣修改你的代碼:
public View getView(final int position, View convertView, ViewGroup parent) {
View MyView;
if(convertView==null)
{
// Inflate the layout
LayoutInflater li = ((Activity) MyContext).getLayoutInflater();
MyView = li.inflate(R.layout.gallery_adapter, null);
ImageButton imageFolders = (ImageButton) MyView.findViewById(R.id.folder);
try {
imageFolders.setImageBitmap(bMap);
imageFolders.setOnClickListener(this);
imageFolders.setId(products.get(position).getId());
} catch (Exception e) {
}
MyView.setLayoutParams(70, 70);
}
else
MyView = convertView;
return MyView;
}
已加載的圖像將不會重新加載。 你試過這種可能性嗎?
public View getView(final int position, View convertView, ViewGroup parent){
View MyView;
ImageButton imageFolders;
if(convertView==null){
LayoutInflater li = ((Activity) MyContext).getLayoutInflater();
MyView = li.inflate(R.layout.gallery_adapter, null);
}else{
MyView = convertView;
}
imageFolders = (ImageButton) MyView.findViewById(R.id.folder);
try {
imageFolders.setImageBitmap(bMap);
imageFolders.setOnClickListener(this);
imageFolders.setId(products.get(position).getId());
} catch (Exception e) {}
MyView.setLayoutParams(70, 70);
return MyView;
}
我沒有測試它,但試一試
做所有的布局修改,比如textView.setText("text");
在if(convertView == null)
內部極大地提高了我的性能。
另外如果你需要調用super.getView();
在if(convertView == null)
塊之后立即調用它。
對於else
部分return convertView
。
最好的辦法是:
在 CustomAdapter 的構造函數中初始化 Context、LayoutInflayer 和 Bitmaps(或 Drawables)
private Context ctx; private int resource; private Bitmap[] bmps; private LayoutInflater inflater; MyCustomAdapter(Context ctx, Bitmap[] bmps) { this.ctx = ctx; this.bmps = bmps; this.resource = R.layout.gallery_adapter; this.inflater = LayoutInflater.from(ctx); }
如果不為空,則回收您的 convertView
public View getView(final int position, View convertView, ViewGroup parent) { final ImageButton imgBtn; // Recycle convertView if (convertView == null) { imgBtn = (ImageButton) inflater.inflate(resource, null, false); } else { imgBtn = (ImageButton) convertView; } // Set Attributes imgBtn.setImageBitmap(bmps[position]); // imgBtn.setLayoutParams(70, 70); // Remove this and put it in your xml resource ... return imgBtn;
此代碼假設您的 xml 資源 (R.layout.myImageButton) 如下所示:
<?xml version="1.0" encoding="utf-8"?>
<ImageButton xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/someId"
android:layout_width="70dp"
android:layout_height="70dp"
...
/>
獲取較低細節的圖像,或獲得更快的手機。
或者,或者以這樣一種方式對 gridview 進行編程,即僅在您開始看到它們時才加載圖像。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.