Vimeo Video Thumbnail в ImageView

Я разрабатываю приложение для 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 ответа

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 так что вам не нужно без необходимости снимать изображение большего размера, чем нужно.

Вы также должны, вероятно, не просто установить URI изображения непосредственно на yourImageView, но вместо этого вы должны использовать некоторую библиотеку кэширования изображений (или некоторую реализацию кэширования).

Я бы посоветовал заглянуть в Пикассо, Глайд или Фреско. Или просто Google "Кэширование изображений на Android".

Вот решение с использованием 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 учебный класс. Узнайте больше о том, как использовать его здесь.

Пожалуйста, используйте библиотеку Picasso для загрузки изображения в режиме просмотра изображений.

В градле

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) {
           }
        });
}
Другие вопросы по тегам