Html.from()加載網絡圖片

TextView加載帶有圖片的Html時,會顯示一個藍色的小框框,而不會顯示圖片
這裏寫圖片描述

想要顯示圖片,就需要調用fromHtml(String source, Html.ImageGetter imageGetter, Html.TagHandler tagHandler)方法。

重寫ImageGetter
先判斷drawable是否已經下載,沒有下載就開啓線程下載

Html.ImageGetter imageGetter = new Html.ImageGetter() {
        @Override
        public Drawable getDrawable(String s) {
            if (pic != null) {
                Log.d("TAG", "顯示");
                return pic;
            }
            else {
                Log.d("TAG", "加載"+s);
                getPic(s);
            }
            return null;
        }
    };

下載圖片,並且等比例放大

 private void getPic(final String s) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    final Drawable drawable = Drawable.createFromStream(new URL(s).openStream(), "");
                    activity. runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            if (drawable != null) {
                                WindowManager wm = (WindowManager) activity.getSystemService(Context.WINDOW_SERVICE);
                                DisplayMetrics outMetrics = new DisplayMetrics();
                                wm.getDefaultDisplay().getMetrics(outMetrics);
                                float picW = drawable.getIntrinsicWidth();
                                float picH = drawable.getIntrinsicHeight();
                                int width = outMetrics.widthPixels;
                                drawable.setBounds(0,0,width,(int)((picH/picW)*width));
                                pic = drawable;
                                if (Build.VERSION.SDK_INT >= 24)
                                    text.setText(Html.fromHtml(resource,Html.FROM_HTML_MODE_COMPACT,imageGetter,null));
                                else
                                    text.setText(Html.fromHtml(resource,imageGetter,null));
                            }
                        }
                    });
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }

這裏寫圖片描述

最後附上自己用的工具欄

import android.app.Activity;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.text.Html;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.WindowManager;
import android.widget.TextView;
import java.io.IOException;
import java.net.URL;

/**
 * Created by CKZ on 2017/8/8.
 */

public class HtmlUtils {
    private static HtmlUtils instance;
    private Activity activity;
    private TextView text;
    private Drawable pic;
    private String resource;
    private HtmlUtils(Activity activity,TextView text){
        this.activity =activity;
        this.text = text;
    }
    public static HtmlUtils getInstance(Activity activity,TextView text){
        if (instance == null){
            instance = new HtmlUtils(activity,text);
        }
        return instance;
    }

    public void setHtmlWithPic(String resource){
        this.resource = resource;
        if (Build.VERSION.SDK_INT >= 24)
            text.setText(Html.fromHtml(resource,Html.FROM_HTML_MODE_COMPACT,imageGetter,null));
        else
            text.setText(Html.fromHtml(resource,imageGetter,null));

    }
    Html.ImageGetter imageGetter = new Html.ImageGetter() {
        @Override
        public Drawable getDrawable(String s) {
            if (pic != null) {
                Log.d("TAG", "顯示");
                return pic;
            }
            else {
                Log.d("TAG", "加載"+s);
                getPic(s);
            }
            return null;
        }
    };

    /**
     * 加載網絡圖片
     * @param s
     */
    private void getPic(final String s) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    final Drawable drawable = Drawable.createFromStream(new URL(s).openStream(), "");
                    activity. runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            if (drawable != null) {
                                WindowManager wm = (WindowManager) activity.getSystemService(Context.WINDOW_SERVICE);
                                DisplayMetrics outMetrics = new DisplayMetrics();
                                wm.getDefaultDisplay().getMetrics(outMetrics);
                                float picW = drawable.getIntrinsicWidth();
                                float picH = drawable.getIntrinsicHeight();
                                int width = outMetrics.widthPixels;
                                drawable.setBounds(0,0,width,(int)((picH/picW)*width));
                                pic = drawable;
                                if (Build.VERSION.SDK_INT >= 24)
                                    text.setText(Html.fromHtml(resource,Html.FROM_HTML_MODE_COMPACT,imageGetter,null));
                                else
                                    text.setText(Html.fromHtml(resource,imageGetter,null));
                            }
                        }
                    });
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }
}

然後再Activity中調用
HtmlUtils.getInstance(this,texthtnl).setHtmlWithPic(resource); 即可。

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