【问题标题】:Custom Gallery with Images and Videos in android to select multiple items在 android 中使用图像和视频自定义图库以选择多个项目
【发布时间】:2017-09-22 18:50:47
【问题描述】:

我想创建一个自定义画廊以在 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);

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

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

【问题讨论】:

  • 你能发布你最终做了什么吗?我正在尝试做同样的事情。

标签: android video gallery


【解决方案1】:

您可以从具有多个选项选择选项的自定义 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);

【讨论】:

  • 如何获取视频路径以及视频缩略图和持续时间。
【解决方案2】:

获取视频缩略图和时长:

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

【讨论】:

    【解决方案3】:

    试试这个链接 Android 自定义图片库,在网格中带有复选框以选择多个项目

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

    【讨论】:

    • 即使你包含一个有用的链接,你也应该在你的答案中评论它最重要的部分以及它是如何工作的,并包含该链接作为补充。
    【解决方案4】:
     int column_index_thumb_data = videoCursor.getColumnIndex(MediaStore.Video.Thumbnails.DATA);
    
     String thumbnail = videoCursor.getString(column_index_thumb_data);
    

    【讨论】:

    • 您能解释一下为什么您的解决方案有效吗?对于未来的读者来说,重要的是要知道为什么某事有效,而不是在没有线索的情况下复制粘贴
    猜你喜欢
    • 2014-01-09
    • 1970-01-01
    • 2013-03-29
    • 2015-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    相关资源
    最近更新 更多