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