web-dev-qa-db-ja.com

正方形のピカソライブラリを使用してビデオのサムネイルを読み込む方法は?

現在、私は次のスニペットを使用して、ListViewにピカソを使用してMediaStore画像のサムネイルをロードしています:(video.getData()は、_mnt/sdcard/..._などの画像の実際のパスを返します)

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

video.getData()の代わりにphoto.getData()を渡すだけではMediaStoreビデオサムネイルを読み込めません。

19

まず、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);
38
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

注-画像ビューにサムネイルを表示し、それに追加のピカソ機能を適用しない場合は、このコメントに従ってください。円形のサムネイルを表示するように少し変更しました。見栄えがいいです。

ピカソを使用しないでください。これを行うには非常に簡単な方法を使用します。

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

そしてtransformBitmapToCircularBitmap関数は次のとおりです-

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

以前は、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はビットマップではなくビデオサムネイルパスを取得します

0
Renaud C.