首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android -图像即使已经加载,也不会显示。

Android -图像即使已经加载,也不会显示。
EN

Stack Overflow用户
提问于 2013-04-05 01:22:50
回答 1查看 114关注 0票数 0

我设置了图像视图layout width to a fix valuemy layout height to wrapcontent。图像视图的图像通过url加载。所发生的情况是,在绘制视图时,由于图像尚未加载,它将只绘制layout_width。但是,当图像已经加载时,将不再绘制高度,因此不会显示任何图像。只有当我来回滚动时,它才会被显示,因为,我猜这是视图重新绘制的时间。我有办法解决这个问题吗?使用invalidate()不起作用。也许我做错了?

我将只发布我的代码片段:这是扩展getView MyAdapter的BaseAdapter:

代码语言:javascript
运行
复制
 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的一部分:

代码语言:javascript
运行
复制
  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);
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-05 05:04:16

您可以通过在图像视图中放置一些加载映像来解决此问题,直到您从服务器获得图像数据。

代码语言:javascript
运行
复制
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);

}
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15824420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档