在开发中实现点击 WebView 中的图片,调用原生控件放大展示
来源:互联网 发布:关于酸雨的数据 编辑:程序博客网 时间:2024/04/30 06:48
现在有很多时候,我们的 App 都进行了混合开发,而最简单,最常用的就是有些网页采用了 WebView 进行展示,这就需要我们了解和懂得如何实现 WebView 和 JS 进行交互。今天我们就来学习一下,如何点击 WebView 中的网页图片,调用原生控件进行放大展示。
其实实现这种交互非常简单,就是通过 JS 调用原生控件。基本思路如下:
- 首先加载一个 html 网页,网址或者本地 html 文件都可以。
- 遍历 html 标签源代码,找到所有的 img 标签节点。
- 给 遍历到得 img 标签节点加上 onClick 事件。
- 通过点击加上的 onClick 事件,通过 JS 调用原生控件,展示放大即可。
效果图
这是在线网址展示的效果图
这是本地 html 文件展示出的效果图
实现方法
html 文件
我们先写一个简单的 html 文件,里面放两张图片。源代码非常简单。代码如下:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GBK"> </head> <body> <h1>显示图片</h1> <img src='https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1490585759664&di=56aa55f480140643a11c134ef8bdae07&imgtype=0&src=http%3A%2F%2Fi2.sanwen8.cn%2Fdoc%2F1610%2F704-161024211H3.jpg' style='vertical-align:middle;' /> <h1>第二张图片</h1> <img src='https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1490585932299&di=9ab54209dc8672cdd45b817ba3b09000&imgtype=0&src=http%3A%2F%2Fimgsrc.baidu.com%2Fbaike%2Fpic%2Fitem%2F5fdf8db1cb134954a4d833a0534e9258d0094a34.jpg' /> </body><html>
写的这个本地的 html 文件,放到 main/assets 目录下即可。
设置 WebView
这一步就是将我们写的 html 本地文件放入到 WebView 中。方法如下:
mWebView = (WebView) findViewById(R.id.webview); WebSettings webSettings = mWebView.getSettings(); // 设置与Js交互的权限 webSettings.setJavaScriptEnabled(true); // 设置允许JS弹窗 webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //防止中文乱码 mWebView.getSettings().setDefaultTextEncodingName("UTF-8"); // 先载入JS代码 // 格式规定为:file:///android_asset/文件名.html// mWebView.loadUrl("file:///android_asset/image.html"); mWebView.loadUrl("http://www.toutiao.com/a6401738581286682881/#p=1"); //载入js mWebView.addJavascriptInterface(new JavascriptInterface(this), "imagelistner");关键的代码是:
mWebView.addJavascriptInterface(new JavascriptInterface(this), "imagelistner");
这行代码就是 WebView 与 JavaScript 交互的关键。上面两个参数,一个是 JS 接口,一个是监听函数的名字。
遍历 img 节点,加入监听
mWebView.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); //这段js函数的功能就是注册监听,遍历所有的img标签,并添加onClick函数,函数的功能是在图片点击的时候调用本地java接口并传递url过去 mWebView.loadUrl("javascript:(function(){" + "var objs = document.getElementsByTagName(\"img\"); " + "for(var i=0;i<objs.length;i++) " + "{" + " objs[i].onclick=function() " + " { " + " window.imagelistner.openImage(this.src); " + " } " + "}" + "})()"); } }); }这里有行代码注意一下:
window.imagelistner.openImage(this.src);这里就是给每个 img 节点加入点击事件,
注意看这个imagelistenr其实就是 mWebView.addJavascriptInterface(new JavascriptInterface(this), "imagelistner") 定义的方法名,
而 openImage 就是我们自定义的 JavaScriptInterface 中的 openImage 方法。
通过 JS 接口,调用原生控件
// js通信接口 public class JavascriptInterface { private Context context; public JavascriptInterface(Context context) { this.context = context; } @android.webkit.JavascriptInterface public void openImage(String img) { Intent intent = new Intent(); intent.putExtra("img", img); intent.setClass(context, ImageActivity.class); context.startActivity(intent); System.out.println(img); } }这里的 JavascriptInterface 就是和 mWebView.addJavascriptInterface(new JavascriptInterface(this), "imagelistner")中的 new JavascriptInterface(this) 对应的。这样我们就通过 JavascriptInterface 就把 JS 和 WebView 之间实现通信了。附加:webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url.endsWith(".jpg") || url.endsWith(".jpeg") || url.endsWith(".png") || url.endsWith(".JPG") || url.endsWith(".JPEG") || url.endsWith(".PNG")) { openImageActivity(url); return true; } return super.shouldOverrideUrlLoading(view, url); } });0 0
- 在开发中实现点击 WebView 中的图片,调用原生控件放大展示
- 实现点击 WebView 中的图片,调用原生控件展示图片
- 开发中点滴积累图片点击放大的实现
- iOS开发,webView加载图片, js交互, 点击图片放大
- 点击图片缩略图放大展示效果的实现
- Android中下载图片展示到界面点击放大
- Android中下载图片展示到界面点击放大
- Android 点击图片放大展示 展示中可调节图片的缩放显示 图片查看器
- 在webview 上实现图片慢慢放大的动画
- 实现WebView中点击图片显示大图
- android 关于WebView点击图片展示大图
- android 关于WebView点击图片展示大图
- jQuery实现图片点击放大
- 实现点击图片放大全屏
- js实现图片点击放大
- vue 实现点击图片放大
- iOS开发笔记:实现点击图片放大全屏
- iOS开发笔记:实现点击图片放大全屏
- mysql主从同步一致性,延迟性监控
- greenplum中AO表数据文件数量膨胀探究
- 基于线段树的RMQ
- 新建Android工程xml UI页面无法预览
- linux笔记-iscsi
- 在开发中实现点击 WebView 中的图片,调用原生控件放大展示
- 《递归递推练习》H
- Android------五大存储方式详解
- Android--Linux kernel log级别修改
- Struts2 Namespace_命名空间
- 如何通过SQL注入获取服务器本地文件
- codeforces 788B Weird journey (欧拉路)
- 【设计模式】结构型模式——适配器模式(Adaper Pattern)
- 分库分表落地与实践
原创粉丝点击热门IT博客热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 万仙山门票 河南万仙山 万仙山郭亮村 万仙山在哪 万仙山万宝酒店 辉县万仙山住宿 万仙山在哪里 八里沟和万仙山哪个好玩 万仙山景区旅游攻略 万仙阵 壁立万仞 山成九仞功亏一篑 万仟祛痘 万仟堂 万仟堂淘宝 万仟堂茶具中国排第几 万仟堂茶具价格 万仟堂旗舰店 万千堂 万代兰图片 万代兰花语 微企通 企企通 上海企通软件有限公司 企事通集团有限公司 万众一心 万众瞩目 万众侠 万众 万众网拍 万众集团 万众118 万众瞩目的意思 大众创新万众创业 98322万众堂资料中心 万众一心的意思 99832万众堂论坛香港99832 万众地产李五亮的女儿 万众地产李五亮陕a99999 万众国际影城 兰州万众财务服务