7

我想创建一个自定义画廊以在 sdcard 中显示所有图像和视频(以及持续时间)。我正在使用以下代码来构建自定义画廊

代码:

final String[] columns = { MediaStore.Images.Media.DATA ,MediaStore.Images.Media._ID};
    final String orderBy = MediaStore.Images.Media.DATE_TAKEN;
    Cursor imagecursor = getContentResolver().query(
            MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, null,
            null, orderBy + " DESC");

    this.imageUrls = new ArrayList<String>();


    for (int i = 0; i < imagecursor.getCount(); i++) {
        imagecursor.moveToPosition(i);
        int dataColumnIndex = imagecursor.getColumnIndex(MediaStore.Images.Media.DATA);
        imageUrls.add(imagecursor.getString(dataColumnIndex));

    }
  String[] parameters = { MediaStore.Video.Media._ID,
                MediaStore.Video.Media.DATA,
                MediaStore.Video.Media.DISPLAY_NAME,
                MediaStore.Video.Media.SIZE, MediaStore.Video.Media.DURATION,
                MediaStore.Video.Media.DATE_TAKEN,MediaStore.Video.Thumbnails.DATA};



     Cursor   videocursor = getContentResolver().query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
                parameters, null, null, null);

     for (int i = 0; i < videocursor.getCount(); i++) {
         videocursor.moveToPosition(i);
         imageUrls.add(videocursor.getString(videocursor.getColumnIndex(MediaStore.Video.Thumbnails.DATA)));
            }
    options = new DisplayImageOptions.Builder()
        .showStubImage(R.drawable.stub_image)
        .showImageForEmptyUri(R.drawable.image_for_empty_url)
        .cacheInMemory()
        .cacheOnDisc()
        .build();

    imageAdapter = new ImageAdapter(this, imageUrls);

从上面的代码我可以得到视频的路径,我怎样才能得到视频缩略图和视频时长。并在画廊中展示它

如果项目中有任何带有视频和图像的自定义画廊的项目,请发布我实际上想要创建自定义画廊以选择多个图像和视频文件的链接。我在谷歌搜索了很多我找到自定义图片库但没有视频请帮助我解决这个问题。

4

4 回答 4

5

您可以从具有多个选项选择选项的自定义 GridView 中获取想法。Github 上有一个开源项目。

https://github.com/paramvir-b/AndroidGridViewCompatLib

在此处输入图像描述

在这个例子中你需要改变

 imageView.setImageResource(mThumbIds[position]);

imageView.setImageURI(uri);// URI of Image from SD Card

或者

 imageView.setImageBitmap(bitmap);

对于视频:-

Video Thumbnail is in the form of Bitmap so you can show in ImageView.
private Bitmap bmThumbnail;
private ImageView videoview = null;
bmThumbnail = ThumbnailUtils.createVideoThumbnail(PATH_OF_THE_VIDEO,Thumbnails.MICRO_KIND);
videoview.setImageBitmap(bmThumbnail);

获得持续时间:-

String[] proj = { MediaStore.Video.Media.DATA ,MediaStore.Video.Media.DURATION};
Cursor cursor = managedQuery(contentUri, proj, null, null, null);
if (cursor == null)
    return null;
int column_index = cursor
        .getColumnIndexOrThrow(MediaStore.Video.Media.DATA);
int column_index_duration = cursor
        .getColumnIndexOrThrow(MediaStore.Video.Media.DURATION);
cursor.moveToFirst();
long duration= cursor.getInt(column_index_duration);
String videoPath= cursor.getString(column_index);
于 2013-08-27T05:54:30.823 回答
0

试试这个链接 Android custom image gallery with checkbox in grid to select multiple items

http://vikaskanani.wordpress.com/2011/07/20/android-custom-image-gallery-with-checkbox-in-grid-to-select-multiple/

于 2014-01-22T03:32:15.623 回答
0

获取视频缩略图和持续时间:

for(int ii = 0; ii < videocursor.getCount(); ii ++){
                videocursor.moveToPosition(ii);
                int id_v = videocursor.getInt(video_column_index);
                int datacolumn_v = videocursor.getColumnIndex(MediaStore.Video.Media.DATA);
                long duration = videocursor.getInt(video_column_duration);             // getting duration of the every videos

                String hms = String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(duration), 
                        TimeUnit.MILLISECONDS.toMinutes(duration) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(duration)),
                        TimeUnit.MILLISECONDS.toSeconds(duration) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(duration)));

                durationcount.add(hms);

                bitList.add(MediaStore.Video.Thumbnails.getThumbnail(getContentResolver(), id_v,
                        MediaStore.Video.Thumbnails.MICRO_KIND, null));
                arrPathList.add(videocursor.getString(datacolumn_v));
            }
于 2013-12-13T07:11:42.290 回答
0
 int column_index_thumb_data = videoCursor.getColumnIndex(MediaStore.Video.Thumbnails.DATA);

 String thumbnail = videoCursor.getString(column_index_thumb_data);
于 2017-06-15T12:50:37.453 回答