0

Я пытаюсь создать приложение, которое снимает видео, а затем отображает видео в gridview. Я дошел до того, что все миниатюры видео отображаются в виде сетки, как должны. Однако моя проблема заключается в том, что метод, который я использую, имеет много времени задержки. Требуется некоторое время, чтобы загрузить gridview, и когда я пытаюсь прокрутить, всегда есть своего рода отставание. Скорее всего, это связано с тем, что я использую битовые карты для каждого видеоролика.Проблемы с использованием растровых изображений для эскизов

Мне было интересно, что я могу сделать, чтобы сделать это намного быстрее и плавнее. Мой код размещен ниже.

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

Спасибо за вашу помощь

ответ

1

2 вещи:

Используйте ViewHolder кэшировать все, как описано здесь: Making ListView Scrolling Smooth (относится к GridViews тоже)

Кроме того, используйте ImageLoader для загружать изображения динамически. Есть много доступных или вы можете создавать свои собственные. Вот некоторые из них:

Все эти погрузчики используют Bitmap кэшей, как описано здесь: Caching Bitmaps

Кроме того, вы могли бы потенциально быть на самом деле создания миниатюрные растровые изображения при возврате представления. Это кажется мне очень дорогим. Я сделал бы это как отдельный шаг, не связанный с их отображением. Например, отправьте AsyncTask, когда ваша деятельность сначала создана для создания любых новых эскизов. Затем в свой адаптер просто запросите MediaStore, чтобы получить сгенерированные миниатюры.

Смежные вопросы