首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Volley的NetworkImageView - setImageBitmap方法行不通

Volley的NetworkImageView - setImageBitmap方法行不通
EN

Stack Overflow用户
提问于 2014-01-21 22:12:48
回答 6查看 9.1K关注 0票数 21

我在我的项目中使用volley库。

我通常让NetworkImageView使用setImageUrl方法下载图像:

代码语言:javascript
复制
networkImageView.setImageUrl(imageUrl, mImageLoader)

这很好,但是..。当我尝试使用ImageLoader的get方法“手动”下载位图,然后自行设置位图时,它不起作用:

代码语言:javascript
复制
mImageLoader.get(imageUrl,new ImageLoader.ImageListener()
    {
        @Override
        public void onResponse(ImageLoader.ImageContainer imageContainer, boolean b)
        {
            if (imageContainer.getBitmap() != null)
            {
                networkImageView.setImageBitmap(imageContainer.getBitmap());
            }
        }

        @Override
        public void onErrorResponse(VolleyError volleyError)
        {

        }
    });

networkImageView.setImageBitmap(imageContainer.getBitmap())行什么也不做。

怎么可能是?提前感谢!

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2014-03-19 08:56:31

此版本的NetworkImageView解决了此问题。

代码语言:javascript
复制
public class CustomNetworkImageView extends NetworkImageView {

    private Bitmap  mLocalBitmap;

    private boolean mShowLocal;

    public void setLocalImageBitmap(Bitmap bitmap) {
        if (bitmap != null) {
            mShowLocal = true;
        }
        this.mLocalBitmap = bitmap;
        requestLayout();
    }

    @Override
    public void setImageUrl(String url, ImageLoader imageLoader) {
        mShowLocal = false;
        super.setImageUrl(url, imageLoader);
    }

    public CustomNetworkImageView(Context context) {
        this(context, null);
    }

    public CustomNetworkImageView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public CustomNetworkImageView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {

    super.onLayout(changed, left, top, right, bottom);
    if (mShowLocal) {
            setImageBitmap(mLocalBitmap);
        }
    }

}
票数 36
EN

Stack Overflow用户

发布于 2014-03-14 03:33:06

您可以通过在NetWorkImageView源代码中添加几行代码来实现这一点(我认为您有权编辑源代码,如果不能,您只需扩展NetWorkImageView,这是非常容易的)。

代码语言:javascript
复制
public class NetworkImageView extends ImageView {
    private Bitmap bitmap;
    public void setLocalImageBitmap(Bitmap bitmap){
        this.bitmap=bitmap;
    }
    /**The volley verison of NetworkImageView has This method, you just need to add
    a new condition, which is else if(bitmap!=null).
    **/
    private void setDefaultImageOrNull() {
    if(mDefaultImageId != 0) {
        setImageResource(mDefaultImageId);
    }
    else if(bitmap!=null){
        setImageBitmap(bitmap);
    }
    else {
        setImageBitmap(null);
    }
}

}

票数 3
EN

Stack Overflow用户

发布于 2017-03-09 07:14:42

接受的答案对我没有用..。以下代码起作用:

代码语言:javascript
复制
    public class CustomNetworkImageView extends NetworkImageView {
    Context mContext;
    public CustomNetworkImageView(Context context) {
        super(context);
        mContext = context;
    }

    public CustomNetworkImageView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
        mContext = context;
    }

    public CustomNetworkImageView(Context context, AttributeSet attrs, int defStyle){
        super(context, attrs, defStyle);
        mContext = context;
    }

    @Override
    public void setImageBitmap(Bitmap bm) {
        if (bm == null) return;
        setImageDrawable(new BitmapDrawable(mContext.getResources(), bm));
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21270152

复制
相关文章

相似问题

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