安卓自定义图库,支持图片和视频,可选择多个项目

7
我可以为您翻译中文内容。以下是需要翻译的it技术相关内容,涉及自定义图库显示SD卡中所有图片和视频(包括持续时间)。我正在使用以下代码构建自定义图库:

代码:

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

从上述代码中,我能够获取视频的路径,如何同时获取视频缩略图和时长,并在画廊中展示。

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


3
你能发布一下你最终做了什么吗?我也在尝试做同样的事情。 - scientiffic
4个回答

5
你可以从带有多选选项的自定义网格视图中获取灵感。Github上有一个开源项目。

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

enter image description here

在这个例子中,您需要更改


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

如何获取视频路径、视频缩略图和时长。 - madan V

0
 int column_index_thumb_data = videoCursor.getColumnIndex(MediaStore.Video.Thumbnails.DATA);

 String thumbnail = videoCursor.getString(column_index_thumb_data);

2
你能解释一下为什么你的解决方案有效吗?对于未来的读者来说,知道为什么某个东西有效而不是简单地复制粘贴是很重要的。 - Imran Ali Khan

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

0

1
即使你包含了一个有用的链接,你也应该在回答中注释它最重要的部分以及它是如何工作的,并把链接作为一个补充。 - nKn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接