Как загрузить миниатюры для видео с использованием библиотеки квадратов picasso?

В настоящее время я загружаю мультимедийные изображения MediaStore с помощью picasso в ListView со следующим фрагментом: (video.getData() возвращает фактический путь изображения, например mnt/sdcard/...)

Picasso.with(this.context)
       .load(new File(photo.getData()))
       .resize(50, 50).config(config)
       .centerCrop()
       .into(viewHolder.imageViewItem);

Теперь я и не могу загрузить мультимедийные миниатюры MediaStore, просто передав video.getData() вместо photo.getData()?

Ответы

Ответ 1

Сначала вам нужно создать VideoRequestHandler

public class VideoRequestHandler extends RequestHandler{
    public String SCHEME_VIDEO="video";
    @Override
    public boolean canHandleRequest(Request data) 
    {
        String scheme = data.uri.getScheme();
        return (SCHEME_VIDEO.equals(scheme));
    }

    @Override
    public Result load(Request data, int arg1) throws IOException 
    {
         Bitmap bm = ThumbnailUtils.createVideoThumbnail(data.uri.getPath(), MediaStore.Images.Thumbnails.MINI_KIND);
         return new Result(bm,LoadedFrom.DISK);  
    }
}

После этого

 VideoRequestHandler videoRequestHandler;
 Picasso picassoInstance;

Построить только один раз

 videoRequestHandler = new VideoRequestHandler();
 picassoInstance = new Picasso.Builder(context.getApplicationContext())
  .addRequestHandler(videoRequestHandler)
  .build();

Затем загрузите файл из пути

 picassoInstance.load(VideoRequestHandler.SCHEME_VIDEO+":"+filepath).into(holder.videoThumbnailView);

Ответ 2

До этого у вас было два варианта:

1) Выполняйте вызов заранее, когда вы загружаете свои видео, например, и сохраняете растровое изображение:

Bitmap thumbnailBitmap = MediaStore.Video.Thumbnails.getThumbnail(content, id, MediaStore.Video.Thumbnails.MINI_KIND, options);

2) Создание пользовательского загрузчика (не проверяется для локальных носителей)

Но теперь, используя Picasso 2.4, вы можете создать RequestHandler. Вы можете посмотреть на эту страницу, например: http://blog.jpardogo.com/requesthandler-api-for-picasso-library/

В моем текущем использовании я извлекаю путь эскизов, а затем вызываю Picasso с этим путем. Чтобы получить маршрут эскизов, я упомянул: android получить видео thumbnail PATH, а не растровое изображение.

Ответ 3

public void bindTo(MediaListHolder mediaListRowHolder, int i) {
    DataPictures message = itemList.get(i);
    try {
        Uri uri = Uri.fromFile(new File(message.getFilePath()));
        if (message.getFileType().equalsIgnoreCase("video")) {
            Bitmap bmThumbnail = ThumbnailUtils.extractThumbnail(ThumbnailUtils.createVideoThumbnail(message.getFilePath(),
                    MediaStore.Video.Thumbnails.FULL_SCREEN_KIND), MAX_WIDTH, MAX_HEIGHT);
            mediaListRowHolder.thumbnail.setImageBitmap(bmThumbnail);
        } else {
            Picasso.with(ApplicationSingleton.getInstance()).load(uri)
                    .resize(size, size)
                    .placeholder(R.drawable.logo_slogan)
                    .into(mediaListRowHolder.thumbnail);
        }
        Log.i(TAG, "bindTo: ");
    } catch (Exception e) {
        e.printStackTrace();
    }
}