Android - 即使已加载图像也不会显示
问题描述:
我设置了我的图像查看3210,my layout height to wrapcontent
。 imageview的图像通过url加载。发生的事情是,当我绘制视图的时候,由于图像尚未加载,它只会绘制layout_width
。但在图像已经加载时,高度不再绘制,因此不会显示图像。它只会显示,如果我来回滚动,因为,我想那是视图将重绘的时间。有什么办法可以解决这个问题吗?使用invalidate()
没有工作。也许我做错了吗?Android - 即使已加载图像也不会显示
我会刚刚发布的我的代码片段: 这是getView
的MyAdapter延伸BaseAdapter:
public View getView(int position, View convertView, ViewGroup parent){
ViewHolder holder = null;
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
Typeface typeFaceMyriadReg = Typeface.createFromAsset(context.getAssets(), MYRIAD_REG);
if(convertView == null){
convertView = inflater.inflate(R.layout.shop_list_layout, null);
holder = new ViewHolder();
holder.txtShopName = (TextView) convertView.findViewById(R.id.name);
holder.txtShopName.setTypeface(typeFaceMyriadReg);
holder.txtShopDesc = (TextView) convertView.findViewById(R.id.desc);
holder.txtShopDesc.setTypeface(typeFaceMyriadReg);
holder.imageView = (ImageView) convertView.findViewById(R.id.prof_pic);
holder.progBar = (ProgressBar) convertView.findViewById(R.id.img_progress);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
imageLoader=new ImageLoader(context.getApplicationContext(), holder.progBar);
ShopRowItem shopItem = (ShopRowItem) getItem(position);
holder.txtShopName.setText(shopItem.getShopName());
holder.txtShopDesc.setText(shopItem.getShopDesc());
imageLoader.DisplayImage(shopItem.getImageUrl(), holder.imageView);
return convertView;
}
那么ImageLoder的一部分:
public void DisplayImage(String url, ImageView imageView)
{
imageViews.put(imageView, url);
Bitmap bitmap=memoryCache.get(url);
if(bitmap!=null){
imageView.setImageBitmap(bitmap);
progressBar.setVisibility(View.VISIBLE);
}
else
{
queuePhoto(url, imageView);
progressBar.setVisibility(View.VISIBLE);
}
}
// ...
// ...
//Used to display bitmap in the UI thread
class BitmapDisplayer implements Runnable
{
Bitmap bitmap;
PhotoToLoad photoToLoad;
public BitmapDisplayer(Bitmap b, PhotoToLoad p){bitmap=b;photoToLoad=p;}
public void run()
{
if(imageViewReused(photoToLoad))
return;
if(bitmap!=null){
//should i do recalculations and adjustments here? ? ?
photoToLoad.imageView.setImageBitmap(bitmap);
progressBar.setVisibility(View.GONE);
}
else{
photoToLoad.imageView.setImageResource(stub_id);
progressBar.setVisibility(View.VISIBLE);
}
}
}
答
可以解决这个问题通过在你的图像视图中放置一些加载图像,直到你从服务器上获取图像数据..
public void DisplayImage(String url, ImageView imageView)
{
imageViews.put(imageView, url);
Bitmap bitmap=memoryCache.get(url);
if(bitmap!=null){
imageView.setImageBitmap(bitmap);
progressBar.setVisibility(View.VISIBLE);
}
else
{
queuePhoto(url, imageView);
//add this line of code here.....
imageView.setImageResource(R.drawable.your_image_placeholder);
progressBar.setVisibility(View.VISIBLE);
}
}