ソースを参照

HtmlImageGetterUtil.java

niusongtao@dl-cg.com 5 年 前
コミット
84f3246ad8

+ 45 - 8
base_library/src/main/java/com/mgtech/base_library/util/HtmlImageGetterUtil.java

@@ -3,6 +3,7 @@ package com.mgtech.base_library.util;
 import android.content.Context;
 import android.graphics.drawable.Drawable;
 import android.text.Html;
+import android.util.Log;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
@@ -14,6 +15,15 @@ import com.bumptech.glide.request.transition.Transition;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.FutureTask;
+
+import io.reactivex.Observable;
+import io.reactivex.Scheduler;
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.functions.Action;
+import io.reactivex.schedulers.Schedulers;
 
 /**
  * @ProjectName: BaseLibrary
@@ -37,16 +47,43 @@ public class HtmlImageGetterUtil implements Html.ImageGetter{
 
     @Override
     public Drawable getDrawable(String source) {
-
-        InputStream inputStream = null;
+        getHtmlDrawable(source);
         try {
-            inputStream = (InputStream) new URL(source).getContent();
-            drawable = Drawable.createFromStream(inputStream, "src");
-            drawable.setBounds(0,0,50,50);
-            inputStream.close();
-            return drawable;
-        } catch (Exception e) {
+            return drawableFutureTask.get();
+        } catch (ExecutionException | InterruptedException e) {
+            e.printStackTrace();
             return null;
         }
     }
+
+    FutureTask<Drawable> drawableFutureTask;
+    private void getHtmlDrawable(String source){
+
+        drawableFutureTask = new FutureTask<Drawable>(new Callable<Drawable>() {
+            @Override
+            public Drawable call() throws Exception {
+                Thread.sleep(2000);
+                InputStream inputStream = null;
+                try {
+                    inputStream = (InputStream) new URL(source).getContent();
+                    drawable = Drawable.createFromStream(inputStream, "src");
+                    drawable.setBounds(0,0,50,50);
+                    inputStream.close();
+                    return drawable;
+                } catch (Exception e) {
+                    return null;
+                }
+            }
+        });
+
+        Scheduler.Worker worker = Schedulers.io().createWorker();
+        worker.schedule(new Runnable() {
+            @Override
+            public void run() {
+                drawableFutureTask.run();
+            }
+        });
+
+        Observable<Drawable> observable = Observable.fromFuture(drawableFutureTask);
+    }
 }