Hoi,
hab ein Problem mit dem ImageGetter. Ich will beliebigen aus dem Internet nach geladenen Text mit HTML und Bildern in eine TextView nachladen. Ohne ImageGetter sieht man nur ein türkises Quadrat, deshalb hab ich einen ein gebaut (bzw. aus nem Forum entwendet).
Das Problem ist nun, dass er mir das Image hinter den Text schiebt und sich das überlappt, eigentlich soll der Text aber um das Bild herum laufen bzw. erst Bild dann Text.
Mein Code:
Java
public class URLImageParser implements Html.ImageGetter {
private Context c;
private View container;
private static int DEVWIDTH = -1;
/***
* Construct the URLImageParser which will execute AsyncTask and refresh the container
* @param t
* @param c
*/
public URLImageParser(View t, Context c) {
this.c = c;
this.container = t;
if (DEVWIDTH == -1) {
DEVWIDTH = SplashScreen.getDeviceWidth();
}
}
public Drawable getDrawable(String source) {
URLDrawable urlDrawable = new URLDrawable();
// get the actual source
ImageGetterAsyncTask asyncTask = new ImageGetterAsyncTask(urlDrawable);
asyncTask.execute(source);
return urlDrawable;
}
public class ImageGetterAsyncTask extends AsyncTask<String, Void, Drawable> {
URLDrawable urlDrawable;
public ImageGetterAsyncTask(URLDrawable d) {
this.urlDrawable = d;
}
@Override
protected void onPreExecute() {
setDrawableBounds(urlDrawable);
}
@Override
protected Drawable doInBackground(String... params) {
String source = params[0];
return fetchDrawable(source);
}
@Override
protected void onPostExecute(Drawable result) {
// set the correct bound according to the result from HTTP call
setDrawableBounds(result);
// change the reference of the current drawable to the result
// from the HTTP call
urlDrawable.setDrawable(result);
// redraw the image by invalidating the container
URLImageParser.this.container.invalidate();
}
/***
* Get the Drawable from URL
* @param urlString
* @return
*/
public Drawable fetchDrawable(String urlString) {
try {
InputStream is = fetch(urlString);
Drawable drawable = Drawable.createFromStream(is, "src");
setDrawableBounds(drawable);
return drawable;
} catch (Exception e) {
return null;
}
}
private void setDrawableBounds(Drawable d) {
Double width = Double.valueOf(d.getIntrinsicWidth());
Double height = Double.valueOf(d.getIntrinsicHeight());
Double newWidth = 0 + width;
Double newHeight = 0 + height;
if (height != 0 && width != 0) {
Double ratio = height / width;
newWidth = Double.valueOf(DEVWIDTH);
newHeight = newWidth * ratio;
}
d.setBounds(0, 0, newWidth.intValue(), newHeight.intValue());
}
private InputStream fetch(String urlString) throws IOException {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet request = new HttpGet(urlString);
HttpResponse response = httpClient.execute(request);
return response.getEntity().getContent();
}
}
}
Alles anzeigen
Hat jemand von euch eine Idee, wie ich das Problem lösen kann bzw. wo mein Fehler liegen könnte?
Gruß,
Matze