Проблема с RecyclerView и Bitmap
У меня есть адаптер, который загружает картинки из музыкальных файлов. Сначала подгружала изображения таким способом
Uri uri = Uri.parse(song.getPath());
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
retriever.setDataSource(uri.toString());
byte[] art = retriever.getEmbeddedPicture();
if(art != null){
Bitmap bitmap = BitmapFactory.decodeByteArray(art, 0, art.length);
Glide.with(this).load(bitmap).into(playlistPhoto);
}
else {
Glide.with(this).asBitmap().load(R.drawable.icon).into(playlistPhoto);
Пробовала добавлять diskcachestrategy все равно не помогает. Сильно подвисает. Тогда решила использовать image loader:
ImageLoader.getInstance().init(ImageLoaderConfiguration.createDefault(getActivity()));
ImageLoader.getInstance()
.displayImage(ContentUris.withAppendedId(Uri.parse("content://media/external/audio/albumart"),
song.getAlbumId()).toString(), playlistPhoto,
new DisplayImageOptions.Builder()
.cacheInMemory(true)
.showImageOnLoading(R.drawable.icon).
resetViewBeforeLoading(true).build());
Работает все идеально - быстро подгружается и recyclerview плавно скользит. Проблема оказалась в другом. В первом способе я вытаскиваю саму картинку песни, во втором способе я вытаскиваю картинку альбома. Вопрос - как в image loader подгружать картинки песни, а не альбома??? Облазила все, но единственный вариант извлечение изображения это только через MediaMetadataRetriever.
Вот извлечение музыкальных композиций:
public void newMusicFiles(String order) {
Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
String[] projection = {
MediaStore.Audio.Media.ALBUM,
MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.DURATION,
MediaStore.Audio.Media.DATA,
MediaStore.Audio.Media.ARTIST,
MediaStore.Audio.Media._ID,
MediaStore.Audio.Media.ALBUM_ID,
MediaStore.Audio.Media.ARTIST_ID,
MediaStore.Audio.Media.IS_MUSIC
};
Cursor cursor = mContext.getContentResolver().query(uri, projection,
null, null, order);
if(cursor != null){
while(cursor.moveToNext()){
String album = cursor.getString(0);
String title = cursor.getString(1);
String duration = cursor.getString(2);
String path = cursor.getString(3);
String artist = cursor.getString(4);
String id = cursor.getString(5);
Long albumId = cursor.getLong(6);
Long artistId = cursor.getLong(7);
Long is_music = cursor.getLong(8);
if(is_music == 0) continue;
MusicFile musicFile = new MusicFile(path, title, artist, album, duration, id, albumId, artistId);
...
}
Вот сам файл:
public class MusicFile {
private String path;
private String title;
private String artist;
private String album;
private String duration;
private String id;
private long albumId;
private long artistId;
public MusicFile(String path, String title, String artist, String album, String duration,
String id, long albumId, long artistId) {
this.path = path;
this.title = title;
this.artist = artist;
this.album = album;
this.duration = duration;
this.id = id;
this.albumId = albumId;
this.artistId = artistId;
}
....
}