【问题标题】:Vimeo Video Thumbnail in an ImageViewImageView 中的 Vimeo 视频缩略图
【发布时间】:2018-07-04 12:06:51
【问题描述】:

我正在开发一个 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

【问题讨论】:

  • 什么是Pictures
  • @NileshRathod 嗨,抱歉打错了。它是 com.vimeo.networking.model.Picture
  • 这条线在做什么? ArrayList arrayListPics = video.pictures.sizes;
  • @EjazAhmad 嗨,video.pictures.sizes 返回 com.vimeo.networking.model.Picture 的所有尺寸的 ArrayList。

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


【解决方案1】:

vimeo-networking 库中的Picture 对象(从arrayListPics.get(0) 返回的对象)不是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 时应该做更多的事情。一件事是您应该根据ImageView 的宽度从yourVideosPictures 抓取Picture,这样您就不会不必要地拉下比您​​需要的更大的图像。

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

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

【讨论】:

    【解决方案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.

    【讨论】:

      【解决方案3】:

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

      在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) {
                 }
              });
      }
      

      【讨论】:

      • 问题不在于图像缓存库,而在于 JoeYo 试图获取图像路径的方式。
      猜你喜欢
      • 2019-08-31
      • 2013-08-31
      • 1970-01-01
      • 2018-01-07
      • 1970-01-01
      • 2011-10-19
      • 2021-07-21
      • 2011-06-10
      • 2015-03-18
      相关资源
      最近更新 更多