3

我正在开发一个 Android 应用程序,它应该在RecyclerView. 然后一个新的活动将播放所选缩略图的视频。如何设置com.vimeo.networking.model.Picture为安卓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
4

3 回答 3

3

库中的Picture对象(从 中返回的对象arrayListPics.get(0)vimeo-networking不是 a 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

您可能还应该只是将图像 URI 直接设置到 上yourImageView,而是应该使用一些图像缓存库(或一些缓存实现)。

我建议研究 Picasso、Glide 或 Fresco。或者只是谷歌“Android上的图像缓存”。

于 2018-07-05T14:59:51.703 回答
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类应用一些转换或使用占位符。在此处阅读有关如何使用它的更多信息

于 2018-07-06T12:53:04.913 回答
1

请使用 Picasso 库在 Image-view 中加载图像。

在毕业

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) {
           }
        });
}
于 2018-07-04T12:14:16.613 回答