提取WebView的图片

 <!-- 授予该程序使用摄像头的权限 -->
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
 
 
 
			contentWebView.getSettings().setJavaScriptEnabled(true);//开启交互(必须加)
            contentWebView.getSettings().setAppCacheEnabled(true);//开启缓存
            contentWebView.getSettings().setDatabaseEnabled(true);//开启数据库
            contentWebView.getSettings().setDomStorageEnabled(true);
            String url = getHtmlData(artcircle.getContent());//格式化后的链接

            contentWebView.loadDataWithBaseURL//加载网页格式的链接
                    (null, url, "text/html", "UTF-8", null);
//           加载普通链接 contentWebView.loadUrl("");
            contentWebView.addJavascriptInterface(new JavascriptInterface(this), "imagelistner");//绑定javasrcipt接口,imagelistner为接口的别名
            contentWebView.setWebViewClient(new WebViewClient() {//给网页设置监听
                public boolean shouldOverrideUrlLoading(WebView view, String url) {
                    //点击webView中的键接,依然在此webview中显示,而不跳转到别的浏览器
                    view.loadUrl(url);//在App内部加载网页
                    return super.shouldOverrideUrlLoading(view, url);
                }

                @Override
                public void onPageFinished(WebView view, String url) {
                    addImageListner(view);//添加需要监听的WebView内部的图片
                    super.onPageFinished(view, url);
                    //当页面加载完成,就调用我们的addImageListener()函数
                }

            });

        }


    }

    private String getHtmlData(String bodyHTML) {
        String head = "<head><style>img{max-width: 100%; width:auto; height: auto;}</style></head>";
        return "<html>" + head + "<body>" + bodyHTML + "</body><html>";
    }

    private void addImageListner(WebView view) {

        //遍历页面中所有img的节点,因为节点里面的图片的url即objs[i].src,保存所有图片的src.
        //为每个图片设置点击事件,objs[i].onclick
        view.loadUrl("javascript:(function(){" +//给监听设置图片的监听函数
                "var objs = document.getElementsByTagName(\"img\"); " +
                "for(var i=0;i<objs.length;i++) " +
                "{" +
                "window.imagelistner.readImageUrl(objs[i].src); " +
                " objs[i].onclick=function() " +
                " { " +
                " window.imagelistner.openImage(this.src); " +
                " } " +
                "}" +
                "})()");
    }

    @Override
    protected void onDestroy() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                Glide.get(YSQ_item_Activity.this).clearDiskCache();//清理磁盘缓存需要在子线程中执行
            }
        }).start();
        Glide.get(this).clearMemory();//清理内存缓存可以在UI主线程中进行
        super.onDestroy();
    }

    class JavascriptInterface {
        private Context context;

        public JavascriptInterface(Context context) {
            this.context = context;
        }

        @android.webkit.JavascriptInterface
        public void readImageUrl(String img) { //把所有图片的url保存在ArrayList<String>中
            listimg.add(img);
        }

        @android.webkit.JavascriptInterface //对于targetSdkVersion>=17的,要加这个声明
        public void openImage(String clickimg)//点击图片所调用到的函数
        {
            int index = 0;
            for (String url : listimg) {
                if (url.equals(clickimg)) {
                    index = listimg.indexOf(clickimg);//获取点击图片在整个页面图片中的位置
                }
            }
            Intent intent = new Intent();
            EventBus.getDefault().postSticky(listimg);//EventBut发送粘性数据全局监听
            intent.putExtra("index", index);//把当前索引也穿过去
            //将所有图片的url以及点击图片的位置作为参数传给启动的activity
            intent.setClass(context, PhotoActivity.class);
            context.startActivity(intent);//启动ViewPagerActivity,用于显示图片
        }
    }

	
	
	
public class PhotoActivity extends AppCompatActivity {


    @BindView(R.id.vpr)
    ViewPager vpr;
    private ArrayList<View> views;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_photo);
        ButterKnife.bind(this);
        if (!EventBus.getDefault().isRegistered(this)) {
            EventBus.getDefault().register(this);
        }

    }

    @Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
    public void getData(final List<String> list) {
        int id = getIntent().getIntExtra("index", 0);

        views = new ArrayList<>();
        for (String s : list) {
            PhotoView photoView = new PhotoView(this);
            photoView.enable();
            photoView.setScaleType(ImageView.ScaleType.FIT_CENTER);
            Glide.with(this).load(s).error(R.mipmap.ic_camera).into(photoView);
            views.add(photoView);
        }

        vpr.setAdapter(new PagerAdapter() {

            @Override
            public int getCount() {
                return list.size();
            }

            @Override
            public boolean isViewFromObject(View view, Object object) {
                return view == object;
            }

            @Override
            public Object instantiateItem(ViewGroup container, int position) {
                container.addView(views.get(position));
                return views.get(position);
            }

            @Override
            public void destroyItem(ViewGroup container, int position, Object object) {
                container.removeView(views.get(position));
            }
        });
        vpr.setCurrentItem(id);

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (EventBus.getDefault().isRegistered(this)) {
            EventBus.getDefault().unregister(this);

        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_42120002/article/details/81590596