web-dev-qa-db-fra.com

Comment charger des vignettes vidéo à l'aide de la bibliothèque Square Picasso?

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()?

18

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);
35
Ram
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();
    }
}
0
Devix

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;
}
0
Shubham Arora

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 .

0
Renaud C.