android – How to load video thumbnails using square picasso library?-ThrowExceptions

Exception or error:

Currently I’m loading MediaStore Image Thumbnails using picasso into the ListView with the following snippet: (video.getData() returns the actual path of the image such as mnt/sdcard/...)

       .load(new File(photo.getData()))
       .resize(50, 50).config(config)

Now I’m and unable to load the MediaStore Video Thumbnails by just passing the video.getData() instead of photo.getData()?

How to solve:

First You need to create VideoRequestHandler

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

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

After That

 VideoRequestHandler videoRequestHandler;
 Picasso picassoInstance;

Build only once

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

Then load file from path



Before, you had two options:

1) Do a call beforehand, when you were retrieving your videos for example and storing the bitmap:

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

2) Creating a custom Downloader (not verified for local media)

But now, with Picasso 2.4, you can create a RequestHandler. You can have a look at this page for example:

In my current usage, I fetch the thumbnail path and then call Picasso with that path. To get the thumbnail path, I referred to: android get video thumbnail PATH, not Bitmap.


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);
        } else {
                    .resize(size, size)
        Log.i(TAG, "bindTo: ");
    } catch (Exception e) {


Note – Follow this comment if you simply want to show thumbnail in your image view and apply no extra Picasso functions on it .
I just modified it a little to show circular thumbnail coz it looks cool .

Don’t use Picasso . Here’s a very simple way to do it .

videoPathUrl = /*your Video File Url */
Bitmap bMap = ThumbnailUtils.createVideoThumbnail(videoPathUrl , MediaStore.Video.Thumbnails.MICRO_KIND);
bMap = transformBitmapToCircularBitmap(bMap);

and transformBitmapToCircularBitmap function is as follows –

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

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

    float r = size / 2f;
    canvas.drawCircle(r, r, r, paint);

    return bitmap;

Leave a Reply

Your email address will not be published. Required fields are marked *