Jsoup网页解析体验(下)

在上一篇博客中我讲到了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 cjt2014@qq.com
 * @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参数就可以了,看下实际的效果如何。



可以看到图片完美的加载出来了,而且都是居中显示了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

涛声依旧Cjt

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值