Я использую этот метод для загрузки изображений и сохранения их в arraylist:
public ArrayList<Song> getMusic(){
ArrayList<Song> list = new ArrayList<>();
Cursor cursor = resolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
null,
null,
null,
MediaStore.MediaColumns.TITLE+" ASC");
if(cursor!=null && cursor.moveToFirst()){
int id = cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID);
int title = cursor.getColumnIndex(MediaStore.Audio.Media.TITLE);
int artist = cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST);
int album = cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM);
do{
Song song = new Song(cursor.getString(id),
cursor.getString(title),
cursor.getString(artist),
cursor.getString(album));
list.add(song);
}while(cursor.moveToNext());
cursor.close();
}
return list;
}
А потом я загружаю изображения в утилизацию. Вот так:
Uri uri = Uri.withAppendedPath(Uri.parse("content://media/external/audio/albumart"), song.getId());
Glide.with(itemView)
.load(uri)
.into(thumb);
И я получаю такой результат:
https://i.stack.imgur.com/TGoog.jpg
Проблема в том, что там, где находится стрелка, есть изображение, которого там быть не должно. Это изображение загружено из моей фотогалереи.
Я нашел решение с помощью Picasso с этим кодом и тем же URI в recyclerView:
Picasso.get().load(uri)
.into(this.thumb);
Но, конечно, изображение имеет полный размер и иногда становится немного запаздывающим, когда я прокручиваю вид. Результат таков:
https://i.stack.imgur.com/fmtTZ.jpg
Итак, как вы можете видеть, второе изображение отлично загружается, как я хочу, но когда я добавляю изображение с измененным размером «Picasso.resize (sizeX, sizeY)», изображение выглядит как первое, которое я опубликовал.
Поэтому мне интересно, есть ли способ загрузить изображения альбомов с помощью Glide, потому что в моем случае при профилировании приложения оно лучше работает в управлении памятью.
Редактировать (это адаптер песни):
public class SongAdapter extends RecyclerView.Adapter<SongAdapter.ViewHolder> implements SectionTitleProvider {
private ArrayList<Song> list;
private onItemClickListener listener;
private int type; // 0 for list, 1 for grid
public SongAdapter(ArrayList<Song> list, int type, onItemClickListener listener){
this.list = list;
this.listener = listener;
this.type = type;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view;
if(type==0){
view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.music_item,null,false);
}else{
view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.music_item_grid,null,false);
}
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
viewHolder.setData(i, listener);
}
@Override
public int getItemCount() {
return list.size();
}
@Override
public String getSectionTitle(int position) {
return list.get(position).getTitle().substring(0,1);
}
public class ViewHolder extends RecyclerView.ViewHolder {
private TextView music, artist;
private ImageView thumb;
private ImageButton more;
public ViewHolder(@NonNull View itemView) {
super(itemView);
music = itemView.findViewById(R.id.textMusic);
artist = itemView.findViewById(R.id.textArtist);
thumb = itemView.findViewById(R.id.musicThumb);
more = itemView.findViewById(R.id.musicOption);
}
public void setData(int i, final onItemClickListener listener){
final Song song = list.get(i);
music.setText(song.getTitle());
artist.setText(song.getArtist());
/*
Glide.with(itemView)
.load(uri)
.into(thumb);
*/
Uri uri = Uri.withAppendedPath(Uri.parse("content://media/external/audio/albumart"), song.getId());
Picasso.get().load(uri)
.into(this.thumb);
more.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
final PopupMenu popup = new PopupMenu(v.getContext(), more);
popup.inflate(R.menu.song_menu);
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()){
case R.id.music_menu_playnow:
return true;
case R.id.music_menu_addqueue:
return true;
case R.id.music_menu_addplaylist:
return true;
case R.id.music_menu_share:
return true;
default:
return onMenuItemClick(item);
}
}
});
popup.show();
}
});
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listener.onItemClick(song);
}
});
}
}
public interface onItemClickListener{
void onItemClick(Song song);
}
}