不确定此处有多少人熟悉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 :加载应用后,用户未点击任何项目:
屏幕截图#2 :用户点击该项目后播放该歌曲
我不确定是什么导致专辑最初是空白的。查看AlbumArtCache.java我看不到任何可能导致此问题的OnClickListener限制。
有关如何解决此问题的任何建议吗?
答案 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);
}