在上一篇博客中我講到了jsoup的使用場景,也做了簡單的使用演示,有興趣可以回顧下
《Jsoup網頁解析體驗(上) - 菜鳥江濤的博客 - CSDN博客》
這一篇講下上一篇遺留的一個問題,如何加載文本中的圖片?
爲了解決這個問題,我們先來看下Html源碼,
有個ImageGetter的接口方法,這個可以實現加載圖片,不過網絡圖片請求還是要使用第三方加載庫,這裏使用Glide來請求加載。
首先引入Glide依賴。
compile 'jp.wasabeef:glide-transformations:2.0.2'
再來看下如何實現接口方法
import android.content.Context; import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.LevelListDrawable; import android.text.Html; import android.util.Log; import android.widget.TextView; import com.bumptech.glide.Glide; import com.bumptech.glide.request.animation.GlideAnimation; import com.bumptech.glide.request.target.SimpleTarget; /** * @ProjectName MImageGetter.java * @PackageName com.cjt.jsoupdemo * @ClassName MImageGetter * @Author CaoJiangtao * @Date on 2018/2/26 15:53 * @Email [email protected] * @Describe 文本框加載圖片的方法 **/ public class MImageGetter implements Html.ImageGetter { Context c; TextView container; public MImageGetter(TextView text, Context c) { this.c = c; this.container = text; } public Drawable getDrawable(String source) { final LevelListDrawable drawable = new LevelListDrawable(); Log.d("CJT" ," 88888888888888888888888888 ---- source ---" + source); Glide.with(c).load(source).asBitmap().centerCrop().into(new SimpleTarget<Bitmap>() { @Override public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) { if (resource != null) { BitmapDrawable bitmapDrawable = new BitmapDrawable(resource); int s = (container.getWidth() - resource.getWidth()) /2 ; // 圖片左側的起始位置 drawable.addLevel(1, 1, bitmapDrawable); drawable.setBounds(s , 0, resource.getWidth()+s, resource.getHeight()); // 圖片劇中顯示 drawable.setLevel(1); container.invalidate(); container.setText(container.getText()); } } }); return drawable; } }
這個寫法參考了網絡上的寫法,不過我做了改進,就是讓圖片居中進行顯示,看下實際的使用方法,找到上篇中MainActivity中的handler處理部分。
public Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); if(msg.what == 100){ Elements elements = ((Element)msg.obj).getElementsByClass("blog_article_c"); content.setText(Html.fromHtml(elements.outerHtml() , new MImageGetter(content , MainActivity.this) , null)); } } };
給FromHtml加上了一個ImageGetter參數就可以了,看下實際的效果如何。
可以看到圖片完美的加載出來了,而且都是居中顯示了。