我使用此课程在TextView
Html.fromhtml()
内显示图片
public class URLImageParser implements ImageGetter {
Context c;
TextView container;
MemoryCache memoryCache = new MemoryCache();
FileCache fileCache;
/***
* Construct the URLImageParser which will execute AsyncTask and refresh the
* container
*
* @param t
* @param c
*/
public URLImageParser(TextView t, Context c) {
this.c = c;
this.container = t;
}
public Drawable getDrawable(String source) {
URLDrawable urlDrawable = new URLDrawable();
// get the actual source
ImageGetterAsyncTask asyncTask = new ImageGetterAsyncTask(urlDrawable);
asyncTask.execute(source);
// return reference to URLDrawable where I will change with actual image
// from
// the src tag
return urlDrawable;
}
public class ImageGetterAsyncTask extends AsyncTask<String, Void, Drawable> {
URLDrawable urlDrawable;
public ImageGetterAsyncTask(URLDrawable d) {
this.urlDrawable = d;
}
@Override
protected Drawable doInBackground(String... params) {
String source = params[0];
fileCache = new FileCache(c);
return fetchDrawable(source);
}
@Override
protected void onPostExecute(Drawable result) {
// set the correct bound according to the result from HTTP call
urlDrawable.setBounds(0, 0, 0 + result.getIntrinsicWidth(),
0 + result.getIntrinsicHeight());
// change the reference of the current drawable to the result
// from the HTTP call
urlDrawable.drawable = result;
// redraw the image by invalidating the container
URLImageParser.this.container.invalidate();
// For ICS
URLImageParser.this.container
.setHeight((URLImageParser.this.container.getHeight() + result
.getIntrinsicHeight()));
// Pre ICS
URLImageParser.this.container.setEllipsize(null);
}
/***
* Get the Drawable from URL
*
* @param urlString
* @return
*/
public Drawable fetchDrawable(String urlString) {
try {
InputStream is = fetch(urlString);
Drawable drawable = Drawable.createFromStream(is, "src");
File f = fileCache.getFile(urlString);
OutputStream os = new FileOutputStream(f);
Utils.CopyStream(is, os);
os.close();
drawable.setBounds(0, 0, 0 + drawable.getIntrinsicWidth(),
0 + drawable.getIntrinsicHeight());
return drawable;
} catch (Exception e) {
return null;
}
}
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();
}
}
}
问题是,如果来自html的图像太大,它会占据整个屏幕,我需要根据width
标记中的<img>
属性设置大小,或者至少设置此类中该图像的最大大小。
感谢任何帮助
答案 0 :(得分:2)
我想你已经知道了解决方案
在你的代码中
drawable.setBounds(0, 0, 0 + drawable.getIntrinsicWidth(),
0 + drawable.getIntrinsicHeight());
只需像这样设置你的drawable的界限
drawable.setBounds(0, 0, 0 + MAX_WIDTH,
0 + MAX_HEIGHT);
如果你想缩放图像,我想你可以在那里做一些数学。 希望这有帮助:)