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 [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參數就可以了,看下實際的效果如何。



可以看到圖片完美的加載出來了,而且都是居中顯示了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章