【发布时间】:2014-10-15 17:27:25
【问题描述】:
我目前正在将设备上的所有视频加载到自定义 ListAdapter 中,该 ListAdapter 显示视频的缩略图 + 更多内容。我注意到当我添加越来越多的视频时,启动速度会变慢。这是我的列表适配器的样子:
public class VideoListAdapter extends ArrayAdapter<Video> {
private ArrayList<Video> allVideos;
private HashMap<String, Bitmap> bitmapCache;
public VideoListAdapter(Context context, ArrayList<Video> videos) {
super(context, R.layout.video_list_item, videos);
this.allVideos = videos;
/* Cache the thumbnails */
setUpBitmaps();
}
private void setUpBitmaps() {
bitmapCache = new HashMap<String, Bitmap>(allVideos.size());
for(Video video : allVideos){
bitmapCache.put(video.getDATA(), ThumbnailUtils.createVideoThumbnail(video.getDATA(), Thumbnails.MICRO_KIND));
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row;
if (convertView == null) {
LayoutInflater inflater = LayoutInflater.from(getContext());
row = inflater.inflate(R.layout.video_list_item, null);
} else {
row = convertView;
}
Video tmpVideo = allVideos.get(position);
String TITLE = tmpVideo.getTITLE();
long vidDur = Long.valueOf(tmpVideo.getDURATION());
String DURATION = String.format(Locale.getDefault(),"%02d:%02d",
TimeUnit.MILLISECONDS.toMinutes(vidDur) -
TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(vidDur)),
TimeUnit.MILLISECONDS.toSeconds(vidDur) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(vidDur)));
String filepath = tmpVideo.getDATA();
Bitmap thumbnail = bitmapCache.get(filepath);
TextView tvTitle = (TextView) row.findViewById(R.id.tvListItemVideoTitle);
TextView tvDuration = (TextView) row.findViewById(R.id.tvListItemVideoDuration);
ImageView ivThumbnail = (ImageView) row.findViewById(R.id.ivListItemVideoThumbnail);
tvTitle.setText(TITLE);
tvDuration.setText(DURATION);
if(thumbnail != null){
ivThumbnail.setImageBitmap(thumbnail);
}
return row;
}
}
应该如何加载缩略图以减少加载列表适配器所需的时间?目前在我的设备上,显示适配器的活动需要 3-4 秒才能显示,而我只有大约 15 个视频。
任何建议将不胜感激。
马库斯
【问题讨论】:
-
使用库来缓存缩略图..而不是重新加载它们..这将减少时间
-
你可以使用查询库..它会保存缩略图...
-
也使用 ViewHolder 类进行视图初始化..
标签: android video android-mediaplayer