您好我在这里创建了一个视频播放应用。其中我使用gridview for Video包含缩略图和视频标题。 但它需要太多的时间来加载,当它加载到gridview时,它也会出现滑动问题(慢)。 这是我的代码
MainActivity
public class MainActivity extends Activity {
ArrayList<AllVideoModel> allVideoList;
AllVideoListAdapter adapter;
GridView gridView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gridView = (GridView) findViewById(R.id.gridView);
allVideoList = listVideo(MainActivity.this);
adapter = new AllVideoListAdapter(MainActivity.this, MainActivity.this, allVideoList);
gridView.setAdapter(adapter);
}
public ArrayList<AllVideoModel> listVideo(Context context) {
ArrayList<AllVideoModel> allVideoModelsList = new ArrayList<>();
Uri uri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
String[] projection = {MediaStore.Video.VideoColumns.DATA};
Cursor c = context.getContentResolver().query(uri, projection, null,
null, null);
if (c != null) {
while (c.moveToNext()) {
AllVideoModel model = new AllVideoModel();
String videoPath = c.getString(0).toString();
String videoTitle = videoPath.substring(videoPath.lastIndexOf("/") + 1);
model.setVideoTitle(videoTitle);
model.setVideoPath(videoPath);
allVideoModelsList.add(model);
}
c.close();
}
return allVideoModelsList;
}
}
AllVideoListAdapter
public class AllVideoListAdapter extends BaseAdapter {
Context context;
ArrayList<AllVideoModel> allVideoModelArrayList;
LayoutInflater inflater;
public AllVideoListAdapter(Context context, ArrayList<AllVideoModel> allVideoModelArrayList) {
this.context = context;
this.allVideoModelArrayList = allVideoModelArrayList;
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return allVideoModelArrayList.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
private class Holder {
ImageView image;
TextView text;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Holder holder = new Holder();
if (convertView == null) {
convertView = inflater.inflate(R.layout.grid_layout_video, parent, false);
holder.image = (ImageView) convertView.findViewById(R.id.image);
holder.text = (TextView) convertView.findViewById(R.id.text);
convertView.setTag(holder);
} else {
holder = (Holder) convertView.getTag();
}
Bitmap bitmap = ThumbnailUtils.createVideoThumbnail(allVideoModelArrayList.get(position).getVideoPath(), MediaStore.Video.Thumbnails.MICRO_KIND);
holder.image.setImageBitmap(bitmap);
/* ImageLoader.getInstance().displayImage("", holder.image,
DisplayImageOption.getDisplayImage(),
new AnimateFirstDisplayListener());*/
holder.text.setText(allVideoModelArrayList.get(position).getVideoTitle());
return convertView;
}
}
AllVideoModel
public class AllVideoModel {
String VideoTitle, VideoPath;
public String getVideoTitle() {
return VideoTitle;
}
public void setVideoTitle(String videoTitle) {
VideoTitle = videoTitle;
}
public String getVideoPath() {
return VideoPath;
}
public void setVideoPath(String videoPath) {
VideoPath = videoPath;
}
}
我认为它应该通过缓存缩略图解决,但我无法得到它。
答案 0 :(得分:0)
优化的一些要点:
CursorAdapter
代替BaseAdapter+ArrayList
,则不再需要提前加载所有网格项,而只需加载那些可见的网格项。如果您的设备上有许多视频,这一点很重要。MediaStore.Video.Thumbnails.getThumbnail
代替ThumbnailUtils.createVideoThumbnail...)
,android可以为你做拇指创建和缓存。 我做了类似照片的事情。有关详细信息,请参阅https://github.com/k3b/APhotoManager/blob/FDroid/app/src/main/java/de/k3b/android/androFotoFinder/gallery/cursor/GalleryCursorAdapter.java