0

ビデオを取得してグリッドビューに表示するアプリを作成しようとしています。すべてのビデオのサムネイルがグリッドビューに表示されるようになりました。ただし、私の問題は、私が使用している方法には多くの遅延があることです。グリッドビューをロードするには時間がかかり、スクロールしようとすると常に何らかの遅延が発生します。これは、すべてのビデオ サムネイルにビット マップを使用していることが原因であると考えられます。

これをより迅速かつスムーズにするために何ができるかを考えていました。私のコードは以下に掲載されています。

class VideoAdapter extends BaseAdapter {
Context context; 
ArrayList<String> videopathlist;
Bitmap bmthumb;


VideoAdapter(Context c, ArrayList<String> filepathlist){
    context = c;
    videopathlist = new ArrayList<String>();
    this.videopathlist.addAll(filepathlist);
    Log.i(TAG, "" + videopathlist);
}

@Override 
public int getCount() {
    return videopathlist.size();
}

@Override
public Object getItem(int position) {
    return videopathlist.get(position);
}

@Override
public long getItemId(int arg0) {
    return 0;
}

@Override
public View getView(int posiiton, View arg1, ViewGroup arg2) {
    ImageView imageview = new ImageView(context);
     bmthumb = ThumbnailUtils.createVideoThumbnail(videopathlist.get(posiiton), MediaStore.Video.Thumbnails.MINI_KIND);
     if (bmthumb != null) {
         Log.i(TAG1, "There is a thumbnail");
         imageview.setImageBitmap(bmthumb);
     } else {
         Log.i(TAG1, "There is NOT a thumbnail");
     }
     imageview.setScaleType(ImageView.ScaleType.CENTER_CROP);
     imageview.setLayoutParams(new GridView.LayoutParams(160, 160));


    return imageview;
}

ご協力いただきありがとうございます

4

1 に答える 1

1

2つのこと:

ここで説明されているように、ViewHolder を使用してすべてをキャッシュします: Making ListView Scrolling Smooth (GridViews にも適用されます)

また、ImageLoader を使用して画像を動的に読み込みます。利用可能なものはたくさんありますが、独自のものを構築することもできます。ここにあるいくつかの:

これらすべてのローダーは、ここで説明されているようにビットマップ キャッシュを利用します:ビットマップのキャッシュ

また、ビューを返すときに実際にサムネイル ビットマップを作成している可能性もあります。これは非常に高価だと思います。これは、表示とは関係なく、別のステップとして行います。たとえば、AsyncTaskアクティビティが最初に作成されたときに を開始して、新しいサムネイルを生成します。次に、アダプターでクエリMediaStoreを実行して、生成されたサムネイルを取得します。

于 2013-05-31T14:05:14.647 に答える