0

ImageViewと TextView をそれぞれ含む複数の項目をGridViewに入力しています。そのような項目は約 100 以上あります。問題は、すべてが適切に実行されていますが、スクロール中にアクティビティが大幅に遅れていることです。画像サイズを制限してビットマップを効率的に読み込もうとしましたが、改善はありませんでした。

また、私の画像のソースは Local Filesystem であり、Category.getCategoryUrl() にはファイルパスが含まれていることにも注意してください。

ここに私のArrayAdapter実装があります:

public class RootCategoryAdapter extends ArrayAdapter<Category> {

    private int resource;
    private Context context;
    private ArrayList<Category> categoryList;
    private DisplayMetrics metrics;

    public RootCategoryAdapter(Context context, int resource,
            ArrayList<Category> categoryList, DisplayMetrics metrics) {
        super(context, resource, categoryList);
        // TODO Auto-generated constructor stub
        this.context = context;
        this.resource = resource;
        this.categoryList = categoryList;
        this.metrics = metrics;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        CategoryHolder holder = null;

        if (convertView == null) {
            // LayoutInflater inflater =(LayoutInflater)
            // context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
            LayoutInflater inflater = ((Activity) context).getLayoutInflater();
            convertView = inflater.inflate(resource, parent, false);

            holder = new CategoryHolder();
            holder.title = (TextView) convertView
                    .findViewById(R.id.root_category_text);
            holder.image = (ImageView) convertView
                    .findViewById(R.id.root_category_image);

            convertView.setTag(holder);
        } else {
            holder = (CategoryHolder) convertView.getTag();
        }

        Category category = categoryList.get(position);

        holder.title.setText(category.getCategoryName());

        // I think problem starts here but not certain
        holder.options = new BitmapFactory.Options();
        holder.options.inJustDecodeBounds = true;
        holder.bitmap = BitmapFactory.decodeFile(category.getCategoryUrl(),
                holder.options);
        holder.options.inJustDecodeBounds = false;
        holder.options.inSampleSize = BasicChores.calculateInSampleSize(
                holder.options, 200, 200);
        holder.bitmap = BitmapFactory.decodeFile(category.getCategoryUrl(),
                holder.options);

        holder.image.setImageBitmap(holder.bitmap);

        return convertView;

    }

    static class CategoryHolder {
        Bitmap bitmap;
        BitmapFactory.Options options;
        TextView title;
        ImageView image;
    }

    @Override
    public boolean hasStableIds() {
        // TODO Auto-generated method stub
        return true;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return categoryList.get(position).getCategoryId();
    }

    @Override
    public Category getItem(int position) {
        // TODO Auto-generated method stub
        return categoryList.get(position);
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return categoryList.size();
    }

    @Override
    public int getPosition(Category item) {
        // TODO Auto-generated method stub
        return categoryList.indexOf(item);
    }

}
4

1 に答える 1

1

おそらく画像をキャッシュする必要があります

これをチェックしてください:

http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html

于 2013-10-27T01:56:33.167 に答える