Android通用音乐播放器在MediaItemViewHolder中添加专辑封面

时间:2015-08-01 00:03:01

标签: java android android-imageview android-bitmap

不确定此处有多少人熟悉Android Universal Music Player,但我在MediaItemViewHolder.java文件中显示相册时遇到问题。

所以这是我修改后的基本结构:

// image view for the album cover
holder.mImageView = (ImageView) convertView.findViewById(R.id.play_eq);

// get the album art url
String artUrl = description.getIconUri().toString();
Bitmap art;
AlbumArtCache cache = AlbumArtCache.getInstance();
art = cache.getIconImage(artUrl);
....
if (cachedState == null || cachedState != state) {
    switch (state) {
    case STATE_PLAYABLE:
         // display the album cover
         holder.mImageView.setImageBitmap(art);
         break;
....

这会正确显示专辑封面。但是,最初为空白。用户点击某个项目后,将显示该图像。

屏幕截图#1 :加载应用后,用户未点击任何项目:

enter image description here

屏幕截图#2 :用户点击该项目后播放该歌曲

enter image description here

我不确定是什么导致专辑最初是空白的。查看AlbumArtCache.java我看不到任何可能导致此问题的OnClickListener限制。

有关如何解决此问题的任何建议吗?

1 个答案:

答案 0 :(得分:1)

cache.getIconImage(url)实际上并未获取网址并将其存储在缓存中。它返回当前值或null。相反,您必须致电AlbumArtCache#fetch(String url, FetchListener listener)

这是一个很好的原型,在FullScreenPlayerActivity#fetchImageAsync(MediaDescription description)

以下是在项目可播放时您可以在方法中执行的操作。

AlbumArtCache cache = AlbumArtCache.getInstance();
Bitmap art = cache.getIconImage(url);
if (art == null) {
  cache.fetch(url, new AlbumArtCache.FetchListener() {
            @Override
            public void onFetched(String artUrl, Bitmap bitmap, Bitmap icon) {
                if (artUrl.equals(url)) {
                    holder.mImageView.setImageBitmap(icon);
                }
            }
        });
} else {
    holder.mImageView.setImageBitmap(bitmap);
}