Jsoup网页解析体验(下)
在上一篇博客中我讲到了jsoup的使用场景,也做了简单的使用演示,有兴趣可以回顾下
《Jsoup网页解析体验(上) - 菜鸟江涛的博客 - ****博客》
这一篇讲下上一篇遗留的一个问题,如何加载文本中的图片?
为了解决这个问题,我们先来看下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参数就可以了,看下实际的效果如何。
可以看到图片完美的加载出来了,而且都是居中显示了。