Jsoup网页解析体验(下)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010898329/article/details/79377977

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



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

猜你喜欢

转载自blog.csdn.net/u010898329/article/details/79377977
今日推荐