Показать обложку альбома из MediaStore.Audio.Albums.ALBUM_ART

Я использую CursorLoader в LoaderManager с Custom CursorAdapter. Мне уже удалось отобразить альбом и связанного с ним исполнителя, и теперь я хочу отобразить обложку.

Вот мой пользовательский CursorAdapter:

public class AlbumsAdapter extends CursorAdapter {


    private final LayoutInflater mInflater;

     public AlbumsAdapter(Context context, Cursor c) {
        super(context, c);
        mInflater=LayoutInflater.from(context);

    }
    @Override
    public void bindView(View view, Context context, Cursor cursor) {

        TextView albumTitle =(TextView)view.findViewById(R.id.albumTextView);
        albumTitle.setText(cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Albums.ALBUM)));

        TextView artistName=(TextView)view.findViewById(R.id.artistTextView);
        artistName.setText(cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Albums.ARTIST)));

        ImageView albumCover=(ImageView)view.findViewById(R.id.artistTextView);
        // Here what should I do ?

    }
    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        final View view=mInflater.inflate(R.layout.albums_row,parent,false); 
        return view;
    }   
}

Я безуспешно пробовал следующее:

    String path = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Albums.ALBUM_ART));
    File imgFile = new  File(path);
    if(imgFile.exists()){

        Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());

        ImageView albumCover=(ImageView)view.findViewById(R.id.album_cover);
        albumCover.setImageBitmap(myBitmap);

    }

Что возвращает MediaStore.Audio.Albums.ALBUM_ART и как его использовать, чтобы ImageView снял обложку? Спасибо.


person Jecimi    schedule 14.06.2012    source источник


Ответы (1)


Мне удалось загрузить обложки альбомов в ImageViews с помощью:

    String coverPath = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Albums.ALBUM_ART));
    Drawable img = Drawable.createFromPath(coverPath);
    ImageView coverAlbum=(ImageView)view.findViewById(R.id.album_cover);
    coverAlbum.setImageDrawable(img);

Проблема в том, что список очень медленный. Я думаю, что я должен уменьшить разрешение обложки, чтобы потреблять меньше памяти.

person Jecimi    schedule 15.06.2012
comment
Я думаю, что использование BitMap может улучшить производительность. - person h4ck3d; 06.02.2013
comment
Как я могу генерировать растровые изображения вместо этого?? - person Ankit Srivastava; 20.11.2013
comment
Я прочитал это из другого вопроса SO stackoverflow.com/questions/17573972/ — комментарий Кена Вольфа предлагает использовать BitmapFactory.decodeFile (путь строки). Я попробую это через секунду. - person Clocker; 01.08.2014