Actuellement, je charge MediaStore Image Thumbnails using picasso dans ListView
avec l'extrait suivant: (video.getData()
renvoie le chemin d'accès réel de l'image, tel que mnt/sdcard/...
)
Picasso.with(this.context)
.load(new File(photo.getData()))
.resize(50, 50).config(config)
.centerCrop()
.into(viewHolder.imageViewItem);
Maintenant, je suis incapable de charger les miniatures vidéo MediaStore en passant simplement video.getData()
au lieu de photo.getData()
?
Vous devez d'abord créer 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);
}
}
Après ça
VideoRequestHandler videoRequestHandler;
Picasso picassoInstance;
Construire une seule fois
videoRequestHandler = new VideoRequestHandler();
picassoInstance = new Picasso.Builder(context.getApplicationContext())
.addRequestHandler(videoRequestHandler)
.build();
Puis chargez le fichier depuis le chemin
picassoInstance.load(VideoRequestHandler.SCHEME_VIDEO+":"+filepath).into(holder.videoThumbnailView);
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();
}
}
Remarque - Suivez ce commentaire si vous souhaitez simplement afficher une vignette dans votre vue d'image sans lui appliquer aucune fonction Picasso supplémentaire. Je l'ai juste modifié un peu pour afficher une vignette circulaire car il a l'air cool.
N'utilisez pas Picasso. Voici un moyen très simple de le faire.
videoPathUrl = /*your Video File Url */
Bitmap bMap = ThumbnailUtils.createVideoThumbnail(videoPathUrl , MediaStore.Video.Thumbnails.MICRO_KIND);
bMap = transformBitmapToCircularBitmap(bMap);
yourImageView.setImageBitmap(bMap);
et la fonction transformBitmapToCircularBitmap est la suivante -
public static Bitmap transformBitmapToCircularBitmap(Bitmap source)
{
int size = Math.min(source.getWidth(), source.getHeight());
int x = (source.getWidth() - size) / 2;
int y = (source.getHeight() - size) / 2;
Bitmap squaredBitmap = Bitmap.createBitmap(source, x, y, size, size);
if (squaredBitmap != source) {
source.recycle();
}
Bitmap bitmap = Bitmap.createBitmap(size, size, source.getConfig());
Canvas canvas = new Canvas(bitmap);
Paint paint = new Paint();
BitmapShader shader = new BitmapShader(squaredBitmap,
BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP);
Paint.setShader(shader);
Paint.setAntiAlias(true);
float r = size / 2f;
canvas.drawCircle(r, r, r, Paint);
squaredBitmap.recycle();
return bitmap;
}
Avant, vous aviez deux options:
1) Faites un appel à l’avance, par exemple lorsque vous récupériez vos vidéos et stockez le bitmap:
Bitmap thumbnailBitmap = MediaStore.Video.Thumbnails.getThumbnail(content, id, MediaStore.Video.Thumbnails.MINI_KIND, options);
2) Création d'un téléchargeur personnalisé (non vérifié pour les médias locaux)
Mais maintenant, avec Picasso 2.4, vous pouvez créer un RequestHandler. Vous pouvez consulter cette page par exemple: http://blog.jpardogo.com/requesthandler-api-for-picasso-library/
Dans mon utilisation actuelle, je récupère le chemin de la vignette, puis appelle Picasso avec ce chemin. Pour obtenir le chemin de la vignette, je me suis référé à: Android, obtenir la vignette de la vidéo PATH, et non Bitmap .