查看了下网上关于TextView加载带图片标签的Html解决方案若干,发现很多都是讲下面这种:1:重写ImageGetter,直接获取网络图片(这是比较通用的做法,但是遇到大图片或者网络不好的情况下,会阻塞主进程)
ImageGetter imgGetter = new Html.ImageGetter() {
public Drawable getDrawable(String source) {
Drawable drawable = null;
URL url;
try {
url = new URL(source);
drawable = Drawable.createFromStream(url.openStream(), ""); //获取网路图片
} catch (Exception e) {
return null;
}
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
return drawable;
}
};
并设置TextView
TextView notice_content = (TextView) findViewById(R.id.notice_content);
notice_content.setText(Html.fromHtml(getIntent().getStringExtra(CONTENT),imgGetter,null));
2:重写ImageGetter,异步加载图片(这是比较流畅的方法,设置一个默认图片,异步加载出来,如果使用Drawable作为对象接收图片,手机会自动缩放图片,这不是我想要的,我需要的是真实大小图片(图片大于手机分辨率等比例缩放))
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import android.content.Context;
import android.content.res.Resources.NotFoundException;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.text.Html.ImageGetter;
import android.util.DisplayMetrics;
import android.view.Display;
import android.widget.TextView;
public class URLImageParser implements ImageGetter {
Context c;
TextView tv_image;
private Drawable mDefaultDrawable;
public URLImageParser(TextView t, Context c) {
this.tv_image = t;
this.c = c;
try {
mDefaultDrawable = c.getResources().getDrawable(
R.drawable.activity_detail_title_default);
// Log.i("-->", "执行");
} catch (NotFoundException e) {
mDefaultDrawable = null;
// Log.i("-->", "执行1");
e.printStackTrace();
}
}
@Override
public Drawable getDrawable(String source) {
// TODO Auto-generated method stub
URLDrawable urlDrawable = new URLDrawable();
// main3.b.add(source);
try {
/*
* mDefaultDrawable.setBounds(0, 0, 0 +
* mDefaultDrawable.getIntrinsicWidth(),
* mDefaultDrawable.getIntrinsicHeight());
*/
urlDrawable.drawable = mDefaultDrawable;
URLImageParser.this.tv_image.invalidate();
} catch (Exception e) {
e.printStackTrace();
}
/*
* urlDrawable.setBounds(0, 0, 0 + mDefaultDrawable.getIntrinsicWidth(),
* mDefaultDrawable.getIntrinsicHeight());
*/
ImageGetterAsyncTask asyncTask = new ImageGetterAsyncTask(urlDrawable);
asyncTask.execute(source);
return urlDrawable;
}
public class ImageGetterAsyncTask extends AsyncTask {
URLDrawable urlDrawable;
public ImageGetterAsyncTask(URLDrawable d) {
this.urlDrawable = d;
}
@Override
protected void onPostExecute(Drawable result) {
if (result != null) {
urlDrawable.drawable = result;
URLImageParser.this.tv_image.invalidate();
// Log.i("-->", "执行3");
}
}
@Override
protected void onPreExecute() {
urlDrawable.setBounds(0, 0,
0 + mDefaultDrawable.getIntrinsicWidth(),
0 + mDefaultDrawable.getIntrinsicHeight());
urlDrawable.drawable = mDefaultDrawable;
URLImageParser.this.tv_image.invalidate();
super.onPreExecute();
}
@Override
protected Drawable doInBackground(String... params) {
// TODO Auto-generated method stub
String source = params[0];// 图片URL
return fetchDrawable(source);
}
// 获取URL的Drawable对象
public Drawable fetchDrawable(String urlString) {
BitmapDrawable bitmap = null;
Drawable drawable = null;
try {
InputStream is = fetch(urlString);
bitmap = (BitmapDrawable) BitmapDrawable.createFromStream(is,"src");
drawable = bitmap;
DisplayMetrics metrics = Constants.metrics;
if(bitmap.getBitmap().getWidth()>metrics.widthPixels||bitmap.getBitmap().getHeight()>metrics.heightPixels)
//进行等比例缩放程序
drawable.setBounds(0, 0,
metrics.widthPixels,
((int)(metrics.widthPixels*bitmap.getBitmap().getHeight()/bitmap.getBitmap().getWidth())));
else
drawable.setBounds(0,0,bitmap.getBitmap().getWidth(),bitmap.getBitmap().getHeight());
} catch (Exception e) {
return null;
}
return drawable;
}
private InputStream fetch(String urlString)
throws MalformedURLException, IOException {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet request = new HttpGet(urlString);
HttpResponse response = httpClient.execute(request);
return response.getEntity().getContent();
}
}
}
URLDrawable类
import android.graphics.Canvas;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
public class URLDrawable extends BitmapDrawable {
protected Drawable drawable;
@Override
public void draw(Canvas canvas) {
if (drawable != null) {
drawable.draw(canvas);
}
}
}
此是解决方案中的部分,如果有好的解决方案,请粘贴出来,让我参考 研究!谢谢