-
-
Save luisfredgs/e29e8988bf4e5394690de54bef39f2c8 to your computer and use it in GitHub Desktop.
Parser para carregar imagens presentes em conteúdo HTML <img/> em TextView no android.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package br.com.toptarget.topvagas.helper; | |
import android.content.Context; | |
import android.graphics.drawable.Drawable; | |
import android.os.AsyncTask; | |
import android.text.Html; | |
import android.util.Log; | |
import android.view.View; | |
import org.apache.http.HttpResponse; | |
import org.apache.http.client.methods.HttpGet; | |
import org.apache.http.impl.client.DefaultHttpClient; | |
import java.io.BufferedInputStream; | |
import java.io.BufferedReader; | |
import java.io.ByteArrayInputStream; | |
import java.io.IOException; | |
import java.io.InputStream; | |
import java.io.InputStreamReader; | |
import java.net.HttpURLConnection; | |
import java.net.MalformedURLException; | |
import java.net.URL; | |
import java.nio.charset.StandardCharsets; | |
import okhttp3.OkHttpClient; | |
import okhttp3.Request; | |
import okhttp3.Response; | |
/* How to use */ | |
/* | |
String html = "Hello " + | |
"<img src='http://.......'/>" + | |
" This is a test " + | |
"<img src='........'/>"; | |
this.textView = (TextView)this.findViewById(R.id.textview); | |
URLImageParser p = new URLImageParser(textView, this); | |
Spanned htmlSpan = Html.fromHtml(html, p, null); | |
textView.setText(htmlSpan); | |
* */ | |
public class URLImageParser implements Html.ImageGetter { | |
Context c; | |
View container; | |
private final OkHttpClient client = new OkHttpClient(); | |
private String TAG = URLImageParser.class.getSimpleName(); | |
/*** | |
* 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; | |
} | |
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]; | |
return fetchDrawable(source); | |
} | |
@Override | |
protected void onPostExecute(Drawable result) { | |
// set the correct bound according to the result from HTTP call | |
Log.d("height",""+result.getIntrinsicHeight()); | |
Log.d("width",""+result.getIntrinsicWidth()); | |
urlDrawable.setBounds(0, 0, 0+result.getIntrinsicWidth(), 0+result.getIntrinsicHeight()); | |
urlDrawable.drawable = result; | |
URLImageParser.this.container.invalidate(); | |
URLImageParser.this.container.setMinimumHeight((URLImageParser.this.container.getHeight() + result.getIntrinsicHeight())); | |
} | |
/*** | |
* Get the Drawable from URL | |
* @param urlString | |
* @return | |
*/ | |
public Drawable fetchDrawable(String urlString) { | |
Log.i("URLImageParser", "String: " + urlString); | |
try { | |
InputStream is = fetch(urlString); | |
Drawable drawable = Drawable.createFromStream(is, "src"); | |
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 { | |
URL url = new URL(urlString); | |
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); | |
InputStream stream = urlConnection.getInputStream(); | |
return stream; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment