Vimeo Video Thumbnail в ImageView - PullRequest
0 голосов
/ 04 июля 2018

Я занимаюсь разработкой приложения для 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 голосов
/ 05 июля 2018

Объект 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".

0 голосов
/ 06 июля 2018

Вот решение с использованием 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 загрузит ее для вас.

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

0 голосов
/ 04 июля 2018

Пожалуйста, используйте библиотеку 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) {
           }
        });
}
...