有空直接写了一个类用来加载textView中的html.图片可以异步加载,项目中使用universalimageloader来加载图片,
所以使用前请自行配置好
首先引入一类解析类 TextViewHtmlParser.javapackage com.loadimg;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import com.example.textviewhtml.R;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;
import com.nostra13.universalimageloader.core.display.SimpleBitmapDisplayer;
import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener;
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.os.Handler;
import android.text.Html;
import android.view.View;
import android.view.WindowManager;
import android.widget.TextView;
public class TextViewHtmlParser implements Html.ImageGetter{
static final List displayedImages = Collections.synchronizedList(new LinkedList());
TextView mTextView;
private Context mContext;
public TextViewHtmlParser(Context c) {
this.mContext=c;
}
public void setTextViewHtml(TextView textview,String htmlStr){
htmlStr=regStr(htmlStr);
this.mTextView = textview;
mTextView.setText(Html.fromHtml(htmlStr,this, null));
}
//对字符串进行一些操作
private String regStr(String str){
//str=str.replaceAll("", "");
return str;
}
@Override
public Drawable getDrawable(String source) {
final URLDrawable urlDrawable = new URLDrawable();
WindowManager wm = (WindowManager)mContext.getApplicationContext()
.getSystemService(Context.WINDOW_SERVICE);
final int width = wm.getDefaultDisplay().getWidth();
//预先设置图片(默认图片)加载前的宽高
urlDrawable.setBounds(0, 0, width,width/3);
// Log.d("ChapterActivity", Consts.BASE_URL + source);
DisplayImageOptions options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.default_1px) // 设置图片在下载期间显示的图片
.showImageForEmptyUri(R.drawable.default_1px)// 设置图片Uri为空或是错误的时候显示的图片
.showImageOnFail(R.drawable.default_1px)// 设置图片加载/解码过程中错误时候显示的图片
.resetViewBeforeLoading(true) // default
.delayBeforeLoading(1000)
.cacheInMemory(true)//设置下载的图片是否缓存在内存中
.cacheOnDisk(true) //设置下载的图片是否缓存在SD卡中
// .postProcessor(null)//在图片显示之前的操作
//.preProcessor(null) //设置图片加入缓存前,对bitmap进行设置
.extraForDownloader(null)
.considerExifParams(false) // default
.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default
.bitmapConfig(Bitmap.Config.ARGB_8888) // default
// .decodingOptions(null)
.displayer(new SimpleBitmapDisplayer()) // default
.displayer(new RoundedBitmapDisplayer(20))//是否设置为圆角,弧度为多少
//.displayer(new FadeInBitmapDisplayer(100))//是否图片加载好后渐入的动画时间
.handler(new Handler()) // default
.build();
//返回一个实例
ImageLoader imageLoader = ImageLoader.getInstance();
imageLoader.loadImage(source, new SimpleImageLoadingListener() {
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap bitmap) {
//缩放图片宽为全屏
Matrix matrix = new Matrix();
int w=bitmap.getWidth();
float bili=(float)width/(float)w;
matrix.postScale(bili,bili); //长和宽放大缩小的比例
bitmap = Bitmap.createBitmap(bitmap,0,0,bitmap.getWidth(),bitmap.getHeight(),matrix,true);
urlDrawable.bitmap = bitmap;
urlDrawable.setBounds(0, 0, bitmap.getWidth(), bitmap.getHeight());
mTextView.invalidate();
mTextView.setText(mTextView.getText()); // 解决图文重叠
}
});
return urlDrawable;
}
}
class URLDrawable extends BitmapDrawable {
protected Bitmap bitmap;
@Override
public void draw(Canvas canvas) {
if (bitmap != null) {
canvas.drawBitmap(bitmap, 0, 0, getPaint());
}
}
}
下面是使用方法//在activity中设置TextView的html字符串
texthtml=(TextView)findViewById(R.id.texthtml);
new TextViewHtmlParser(this).setTextViewHtml(texthtml,htmlStr);