android 图文混排,显示网络图片(续) ImageGetter

来源:互联网 发布:棋院围棋软件 编辑:程序博客网 时间:2024/05/16 05:08

    上文中写了用ImageLoader实现图文混排中网络图片的显示,但是随后又发现了问题,网络加载慢时,会报空指针异常。如果给ImageLoader设置了默认图片的话,虽然不会报异常,但有时会一直显示默认图片,而不显示你所需要的网络图片。经过一番网络查找,找到一个能彻底解决问题的方法,下面例子中解决的是图文混排,加载网络图片,并将图片充满整个TextView的问题,示例如下:

package com.haier.online_shop.goodsdetail.contract;import android.content.Context;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Matrix;import android.graphics.drawable.BitmapDrawable;import android.graphics.drawable.Drawable;import android.text.Html;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import com.haier.online_shop.goodsdetail.GoodsDetailActivity;import com.nostra13.universalimageloader.core.ImageLoader;import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener;import com.orhanobut.logger.Logger;/** * Created by Administrator on 2016/10/29 0029. */public class UrlImageGetter implements Html.ImageGetter {    Context c;    TextView container;    public UrlImageGetter(TextView t,Context c){        this.c = c;        this.container = t;    }    public Drawable getDrawable(String source){        final UrlDrawable urlDrawable = new UrlDrawable();        ImageLoader.getInstance().loadImage(source,new SimpleImageLoadingListener(){            @Override            public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage){                ViewGroup.LayoutParams params = container.getLayoutParams();                params.width = ViewGroup.LayoutParams.MATCH_PARENT;                container.setLayoutParams(params);                float scaleWidth = ((float) container.getMeasuredWidth())/loadedImage.getWidth();                Matrix matrix = new Matrix();                matrix.postScale(scaleWidth,scaleWidth);                loadedImage = Bitmap.createBitmap(loadedImage,0,0,loadedImage.getWidth(),loadedImage.getHeight(),matrix,true);                urlDrawable.bitmap = loadedImage;                urlDrawable.setBounds(0,0,loadedImage.getWidth(),loadedImage.getHeight());                container.invalidate();                container.setText(container.getText());            }        });        return urlDrawable;    }    public class UrlDrawable extends BitmapDrawable {        protected Bitmap bitmap;        @Override        public void draw(Canvas canvas) {            // override the draw to facilitate refresh function later            if (bitmap != null) {                canvas.drawBitmap(bitmap, 0, 0, getPaint());            }        }    }}

在Activity文件中调用:

        Html.ImageGetter imageGetter =newUrlImageGetter(tvDetail,mContext);

        tvDetail.setText(Html.fromHtml(data,imageGetter,null));
即可。

0 0
原创粉丝点击