我正在开发一个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
答案 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
的宽度yourVideosPictures
从ImageView
抓取到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) {
}
});
}