简体   繁体   English

如何在android中使用通用图像加载器显示视频和图像缩略图?

[英]How to show Video and image Thumbnail using Universal image loader in android?

Hi i have Thumbnail of image and video file using cursor by implementing in Asyntask, now i have to wait for loading thumbnails if have more than 500 files in mobile. 嗨我通过在Asyntask中实现使用光标的图像和视频文件的缩略图,现在我必须等待加载缩略图,如果移动中有超过500个文件。

so i used universal-image-loader-1.6.1-with-src.jar for asynchronous loading in which got problem to display bitmap, 所以我使用universal-image-loader-1.6.1-with-src.jar进行异步加载,其中显示位图有问题,

how to load all thumbnails (Image and video file) using universal-image-loader? 如何使用universal-image-loader加载所有缩略图(图像和视频文件)? i have referred this http://www.technotalkative.com/android-select-multiple-photos-from-gallery/ to using Asynchronous image loader but already i have Bitmap - bitList Arraylist (Thumbnail for Image and video) then i how to display these bitmap using that library in gridview? 我已经将这个http://www.technotalkative.com/android-select-multiple-photos-from-gallery/引用到使用异步图像加载器,但我已经有了Bitmap - bitList Arraylist(图像和视频的缩略图)然后我如何在gridview中使用该库显示这些位图?

My Code part is 我的代码部分是

        final String[] columns = { MediaStore.Images.Media.DATA, MediaStore.Images.Media._ID };           // Images getting
        final String orderBy = MediaStore.Images.Media.DATE_TAKEN;

        imagecursor =  mContext.getContentResolver().query(
                MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, null,
                null, orderBy);
        int image_column_index = imagecursor.getColumnIndex(MediaStore.Images.Media._ID);
        this.count = imagecursor.getCount();

bitList = new ArrayList<Bitmap>();
        arrPathList = new ArrayList<String>();
        selectedPath = new ArrayList<String>();

        for (int i = 0; i < this.count; i++) {
            imagecursor.moveToPosition(i);
            int id = imagecursor.getInt(image_column_index);
            int dataColumnIndex = imagecursor.getColumnIndex(MediaStore.Images.Media.DATA);

            bitList.add( MediaStore.Images.Thumbnails.getThumbnail(
                    mContext.getContentResolver(), id,
                    MediaStore.Images.Thumbnails.MICRO_KIND, null));

            arrPathList.add(imagecursor.getString(dataColumnIndex));
        }


final String[] parameters = { MediaStore.Video.Media.DATA, MediaStore.Video.Media._ID, MediaStore.Video.Media.DURATION , MediaStore.Video.Media.MIME_TYPE}; // Videos getting
        final String orderBy_v = MediaStore.Video.Media._ID;

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

        int video_column_index = videocursor.getColumnIndex(MediaStore.Video.Media._ID);

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

            bitList.add(MediaStore.Video.Thumbnails.getThumbnail(mContext.getContentResolver(), id_v,
                    MediaStore.Video.Thumbnails.MICRO_KIND, null));

            arrPathList.add(videocursor.getString(datacolumn_v));
        }

Thanks in Advance. 提前致谢。

Problem solved by using of Lazy loading concept that means i will show first 15 images from we have retrieved by image cursor and stored bitmap into the bitlist Arraylist and will be retrieved at each time by scrolling at the end of the view. 通过使用延迟加载概念解决了问题,这意味着我将显示前15个图像,我们已经通过图像光标和存储的位图检索到位列表Arraylist,并且每次都会通过在视图末尾滚动来检索。

My Code part is : 我的代码部分是:

protected Integer doInBackground(Integer... params){    // here we passes first 15 and will pass next 15  for every scrolling at the end of the view
    // TODO Auto-generated method stub

    if(params[0] != null)
        count = params[0];

    if(count == 15)                     //  this is for will show only 15 images in first attempt in the view
        j = 0;                 // Maintain this variable as static


    for(int i = j; i < count; i ++){

        imgcursor.moveToPosition(i);

        String mime_Type = imgcursor.getString(imgcursor.getColumnIndex(MediaStore.MediaColumns.MIME_TYPE));
        String fMime_type = mime_Type.substring(0,5);


        if(fMime_type.equals("image")){

            id = imgcursor.getInt(imgcursor.getColumnIndex(MediaStore.Images.Media._ID));
            dataColumnIndex = imgcursor.getColumnIndex(MediaStore.Images.Media.DATA);
            String date = imgcursor.getString((imgcursor.getColumnIndex(MediaStore.Images.Media.DATE_TAKEN)));
            if(Constants.DEBUG)Log.e(TAG, "Date of this file"  +date);
            if(bitList != null)
            bitList.add( MediaStore.Images.Thumbnails.getThumbnail(
                getContentResolver(), id,
                    MediaStore.Images.Thumbnails.MICRO_KIND, null));
            durationcount.add(null);
            mimeType.add(fMime_type);
            arrPathList.add(imgcursor.getString(dataColumnIndex));

        }
        else
        {
            id = imgcursor.getInt(imgcursor.getColumnIndex(MediaStore.Video.Media._ID));
            dataColumnIndex = imgcursor.getColumnIndex(MediaStore.Video.Media.DATA);

            if(Constants.DEBUG)Log.e("Duration", "Duration of video :"+imgcursor.getString(dataColumnIndex));
            String path = imgcursor.getString(dataColumnIndex);
            File f = new File(path);

             try {
                FileInputStream in = new FileInputStream(f);

            mRetriever.setDataSource(in.getFD());                   
            String durations = mRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);        // getting duration of the every videos
            long duration = Long.parseLong(durations);
            if(Constants.DEBUG)Log.e(TAG, "Duration of file: "+duration);
            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)));
            if(Constants.DEBUG)Log.e(TAG, "Duration of file Hms: "+hms);
            durationcount.add(hms);
            if(bitList != null)
            bitList.add( MediaStore.Video.Thumbnails.getThumbnail(
                getContentResolver(), id,
                    MediaStore.Video.Thumbnails.MICRO_KIND, null));
            mimeType.add(fMime_type);
            arrPathList.add(imgcursor.getString(dataColumnIndex));
            in.close();

        }
             catch(Exception e){
                 e.printStackTrace();
             }
        }

    }
    j = count;

    return null;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM