1.问题描述
我们可以使用textView.setText(Html.fromHtml(htmlString))
,使用TextView
来显示一段html格式化的字符串。
如果里面有图片之类的可以使用textView.setText(Html.fromHtml(htmlString, imageGetter, tagHandler)
来在文字中同时显示图片。但是往往图片是一个url所以需要联网下载该图片。但是ImageGetter
是同步的机制来加载图片,这在图片较大的时候就会引起卡顿。
2.问题解决
Volley是谷歌推出的一个轻量级的网络加载框架,很适合频繁小数据的请求数据。除了是异步方式基本符合我们的使用需求。
因为Volley是有本地缓存的,所以我们可以这样来解决问题。每次都从缓存中查找图片,如果找到则加载图片;没有找到则发起网络请求,请求图片加入本地缓存,通过调用tv.requestLayout()
重新发起加载过程,此时因为在缓存中已经存在了,可以直接获取到图片。
部分代码引用我封装的一个Volley帮助类 查看VolleyHelper
具体代码:
/**
* VolleyImageGetter
*
* ImageGetter, to get the image in html string, by using Volley.
*
* @author Mislead
* DATE: 2015/7/15
* DESC:
**/
public class VolleyImageGetter implements Html.ImageGetter {
private static String TAG = "VolleyImageGetter";
private int minHeight = 40;
private TextView textView;
private Drawable drawable;
public VolleyImageGetter(TextView textView) {
this.textView = textView;
minHeight = getFountHeight(textView.getTextSize());
}
private int getFountHeight(float textSize) {
Paint paint = new Paint();
paint.setTextSize(textSize);
Paint.FontMetrics fm = paint.getFontMetrics();
return (int) Math.ceil(fm.descent - fm.ascent);
}
@Override public Drawable getDrawable(String source) {
// get the cache key, find bitmap in cache.
final String key = VolleyHelper.getCacheKey(source);
Bitmap bitmap = AndroidHelper.getImageDiskCache().getBitmap(key);
// if not found, request with url
if (bitmap == null) {
VolleyHelper.requestImageWithCacheAndHeader(source, Api.getInstance().getCookieHeader(),
new VolleyHelper.ResponseListener<Bitmap>() {
@Override public void onErrorResponse(VolleyError volleyError) {
}
@Override public void onResponse(Bitmap bitmap) {
// request success, cache bitmap and relayout textView
if (bitmap != null) {
AndroidHelper.getImageDiskCache().putBitmap(key, bitmap);
textView.requestLayout();
}
}
});
} else {
drawable = new BitmapDrawable(Resources.getSystem(), bitmap);
drawable.setBounds(0, 0, bitmap.getWidth() < minHeight ? minHeight : bitmap.getWidth(),
bitmap.getHeight() < minHeight ? minHeight : bitmap.getHeight());
}
return drawable;
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-11-05 14:45:51