ImageView中的Vimeo视频缩略图

时间:2018-07-04 12:06:52

标签: android android-imageview vimeo-api vimeo-android

我正在开发一个Android应用,该应用应在RecyclerView中显示视频缩略图列表。然后,一个新的活动将播放所选缩略图的视频。 如何将com.vimeo.networking.model.Picture设置为Android ImageView

我的代码:

mVimeoClient.fetchNetworkContent(VIDEO_URI, new ModelCallback<VideoList>(VideoList.class) {
           @Override
           public void success(VideoList videoList) {
                ArrayList<Video> videoArrayList = videoList.data;
               Video video = videoArrayList.get(0);
               ArrayList<com.vimeo.networking.model.Picture> arrayListPics = video.pictures.sizes;
               // imageView.setImageDrawable((Drawable) pictureAL.get(0));
               imageView.setImageBitmap( (Bitmap) arrayListPics.get(0));
           }
           @Override
           public void failure(VimeoError error) {
           }
        });
}

setImageBitmap()setImageDrawable()抛出

java.lang.ClassCastException

3 个答案:

答案 0 :(得分:3)

Picture库中的arrayListPics.get(0)对象(从vimeo-networking返回的对象)不是Bitmap,因此不能转换为一个对象。 Picture对象上有一个名为mLink的字段,可以通过Picture#getLink()进行访问。这将返回一个URI字符串,然后您可以在ImageView上进行设置。

您可以使用的最简单的代码是:

    // The ImageView you want to put the thumbnail in
    ImageView yourImageView = <insert your ImageView here>;
    // The video whose thumbnail you want
    Video yourVideo = <insert your Video here>;
    // The collection of `Picture` objects associated with this video.
    // Each `Picture` in this "collection" is a different size
    PictureCollection yourVideosPictures = yourVideo.getPictures();
    // Get the first thumbnail/picture from this collection (not recommended)
    Picture videoThumbnailPicture = yourVideosPictures.getPictures().get(0);
    // The URI to the image of the thumbnail
    String videoThumbnailUri = videoThumbnailPicture.getLink();
    // Convert the String URI to an actual URI object
    final Uri uri = Uri.parse(videoThumbnailUri);
    yourImageView.setImageURI(uri);

我说这是最简单的,因为设置图像uri时,您应该做的更多。一件事是,您应该基于Picture的宽度yourVideosPicturesImageView抓取到yourImageView,这样就不会不必要地拉下比您​​需要的大图像。

您还应该可能不仅将图像URI直接设置到getCurrentPosition()上,还应该使用一些图像缓存库(或某些缓存实现)。

我建议您研究毕加索,格莱德或壁画。或者只是谷歌“ Android上的图像缓存”。

答案 1 :(得分:2)

这是使用Glide 4.x的解决方案。

首先,在您的项目中导入lib:

implementation 'com.github.bumptech.glide:glide:4.6.1'

由于Pictures类包含其他说明的Uri,因此您可以使用Glide轻松地为您下载图像,如下所示。

// Get your ImageView
ImageView iv = findViewById(R.id.your_image_view);
// Get your thumbnails
ArrayList<com.vimeo.networking.model.Picture> arrayListPics = video.pictures.sizes;
// Load them using Glide
Glide.with(this) // Assuming "this" is your Activity, but you can also use any context here
        .load(arrayListPics.get(0).getLink())
        .into(iv);

这样,缩略图位于何处(网络,文件,资源)都无所谓,Glide会为您加载它。

您还可以通过使用Glide的RequestOptions类来应用某些转换或使用占位符。 Read more on how to use it here

答案 2 :(得分:1)

请使用Picasso库将图像加载到图像视图中。

在gradle中

implementation 'com.squareup.picasso:picasso:2.71828'

在您的适配器类中

mVimeoClient.fetchNetworkContent(VIDEO_URI, new ModelCallback<VideoList>(VideoList.class) {
           @Override
           public void success(VideoList videoList) {
                ArrayList<Video> videoArrayList = videoList.data;
               Video video = videoArrayList.get(0);
               ArrayList<Pictures> arrayListPics = video.pictures.sizes;


Picasso.get().load(arrayListPics.get(0).getpath).into(view);
           }
           @Override
           public void failure(VimeoError error) {
           }
        });
}