Android实现加载网页,获取网页上图以及点击图片预览图片

       首先我是一个新手,自学Android几个月,先是看了《第一行代码》,第一版看完了之后才发现有第二版,就又把第二版新增加的一些内容看了。这本书个人感觉很适合初学者,能够较容易的看懂。接下来就自信满满的想要写出来一些功能强大,并且很实用的东西,但是真正开始写的时候才发现有些部分自己根本不知道该怎么写,即使百度出来人家的方法自己也看不懂。这才发现自己学的东西太少了,也就刚刚入了个门。于是,就又找了一些其它的书来看,(其实我也找过视频,但是大部分都太老了,有好多方法都被官方废弃了,所以但是没看视频,不过最近找着一个2017年录制的视频,不过内容不全,地址是点击打开链接)这次看的书是《Android群英传》,这本书在我看来比较难,整本书看完也是有些懂,有些不懂,有一定基础的可以看看。再后来自己写了个利用数据库的通讯录程序,但是写的太垃圾了。感觉最初的几个月好像什么都没学着,想要放弃,但是等心情平静下来之后又想再学学吧,就这个状态一直学到现在。看了好多关于如何学习Android的博客,都提到了要去公司里去学习,所以我也想过转行(我本专业是关于汽车的),去家做安卓的公司,但是无奈我们这城市太小了,根本没有做Android的公司。最后决定就把Android最为一个纯兴趣爱好吧。

接下来进入正题,首先实现加载网页我是利用WebView这个控件。代码如下:

webView = (WebView) findViewById(R.id.web_view);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new MyWebViewClient());
webView.loadUrl(Address);

WebView的使用应该不用说了吧,其中MyWebViewClinent是我自己定义的类,下面会说他的作用。

接下来是获取图片,要获取图片就要获取图片的url,这就使用到了WebView与js的交互,代码如下:

 
  
webView = (WebView) findViewById(R.id.web_view);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.addJavascriptInterface(new JsInterface(MainActivity.this), "imagelistner");
    webView.setWebViewClient(new MyWebViewClient());
    webView.loadUrl(Address);
}

public void addLocalJs() {
    webView.loadUrl("javascript:(function(){ " + "var objs = document.getElementsByTagName(\"img\");"
            + " var array=new Array(); " + " for(var j=0;j+ "array[j]=objs[j].src;" + " }  "
            + "window.imagelistner.getImage(array);   })()");
}

private class JsInterface {
    private Context context;

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

    @JavascriptInterface
    public void getImage(String[] urls) {

        Log.i("chen", "========进入js方法========");

        if (urls != null && urls.length > 0) {
            for (int i = 0; i < urls.length; i++) {
                Log.i("===" + i + "===", urls[i]);
            }
        }
        List = urls;
    }
}

class MyWebViewClient extends WebViewClient{
    @Override
    public void onPageFinished(WebView view, String url) {
        view.getSettings().setJavaScriptEnabled(true);
        super.onPageFinished(view, url);
        Log.i("chen", "加载完成-----" + url);
        view.getSettings().setBlockNetworkImage(false);
        addLocalJs();

    }
}

这里面给WebView增加了一个接口addJavascriptInterface,接下来的addLocalJs()就是遍历网页,查找其中的图片,并把它的Url保存到数组中,然后打印出来获取到的所有图片的Url,并把保存Url的数组提取出来。最后就是我们自定义的类,它继承WebViewClinent并重写他的onPageFinished()方法,在网页加载完成之后调用addLocalJs()方法。(其实这段代码是我拷贝网上的,然后做了一点修改,具体的地址我也忘了)
图片的Url我们得到了,那么就要有个界面去展示这些图片,这里我是用的RecyclerView去展示,这个控件功能很强大,我感觉已经可以代替ListView,GrideView等了。
 
  
Bundle bundle = getIntent().getExtras();
Fruit = bundle.getStringArray("list");
recyclerView = (RecyclerView) findViewById(R.id.recycler_image);
imageAdapter = new ImageAdapter(Fruit);
recyclerView.setLayoutManager(new LinearLayoutManager(ImageLoadActivity.this));
recyclerView.setAdapter(imageAdapter);
这里我们要接收在WebView中传过来的Url,然后再传到Adapter中去加载每张图片,最后把每张图片放到RecyclerView中,就把每张图片都显示出来了。适配器的代码就不贴了。图片预览也就是又单独的去加载了一张图片。不过要注意的是里面加载图片是用的Glide这个开源库,他使用起来很简单,具体使用方法看 https://github.com/bumptech/glide
项目完整代码请看https://github.com/SZJing/ImageDonwload
 
  

你可能感兴趣的:(Android)