Как загрузить миниатюры для видео с использованием библиотеки квадратов 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();
}
}