Android WebView 和 javaScript的互相调用(二)
原文出处:http://blog.csdn.net/wangtingshuai/article/details/8635787
WebView相关阅读
- Android WebView 和 javaScript的互相调用(一)
- Android WebView 和 javaScript的互相调用(二)
- Android WebView 和 javaScript的互相调用(三)
- Android WebView与js交互通信
- Android 4.4 中 WebView 使用注意事项
- Android WebView开发问题汇总
- Android WebView 性能优化
方案思路
- 在点击图片的时候调用本地的java方法并给出响应的图片地址
- 本地获得图片地址后,开启一个遮罩activity进行显示和处理
第二步的实现很容易实现,关键是第一步的实现,在网页中点击图片不会调用本地的java代码。那么我们需要给这个点击事件加上相应的js函数,让点击事件调用的js函数来调用我们提前准备好的java函数,等我们捕获到图片的url剩下的就好处理了。
关键点就是给普通的html注入我们的js函数,让图片能够响应点击并调用js函数,在通过js函数来调用我们的java函数。听起来好像有点绕,不过也不难,下面我们用代码实现下
这次实例的主要功能:点击图片在新的activity中展示,对图片能够进行手势操作,包括双指缩放等效果图
加载webview的activity代码
@SuppressLint("SetJavaScriptEnabled")
public class MainActivity extends Activity { private WebView contentWebView = null; @SuppressLint("SetJavaScriptEnabled") @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); contentWebView = (WebView) findViewById(R.id.webview); // 启用javascript contentWebView.getSettings().setJavaScriptEnabled(true); // 随便找了个带图片的网站 contentWebView.loadUrl("http://www.weim.me/12408.html"); // 添加js交互接口类,并起别名 imagelistner contentWebView.addJavascriptInterface(new JavascriptInterface(this), "imagelistner"); contentWebView.setWebViewClient(new MyWebViewClient()); } // 注入js函数监听 private void addImageClickListner() { // 这段js函数的功能就是,遍历所有的img几点,并添加onclick函数,//函数的功能是在图片点击的时候调用本地java接口并传递url过去 contentWebView.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); " + " } " + "}" + "})()"); } // js通信接口 public class JavascriptInterface { private Context context; public JavascriptInterface(Context context) { this.context = context; } public void openImage(String img) { System.out.println(img); // Intent intent = new Intent(); intent.putExtra("image", img); intent.setClass(context, ShowWebImageActivity.class); context.startActivity(intent); System.out.println(img); } } // 监听 private class MyWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { return super.shouldOverrideUrlLoading(view, url); } @Override public void onPageFinished(WebView view, String url) { view.getSettings().setJavaScriptEnabled(true); super.onPageFinished(view, url); // html加载完成之后,添加监听图片的点击js函数 addImageClickListner(); } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { view.getSettings().setJavaScriptEnabled(true); super.onPageStarted(view, url, favicon); } @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { super.onReceivedError(view, errorCode, description, failingUrl); } } }
展示图片的activity代码
public class ShowWebImageActivity extends Activity { private TextView imageTextView = null; private String imagePath = null; private ZoomableImageView imageView = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.show_webimage); this.imagePath = getIntent().getStringExtra("image"); this.imageTextView = (TextView) findViewById(R.id.show_webimage_imagepath_textview); imageTextView.setText(this.imagePath); imageView = (ZoomableImageView) findViewById(R.id.show_webimage_imageview); try { imageView.setImageBitmap(((BitmapDrawable) ShowWebImageActivity.loadImageFromUrl(this.imagePath)).getBitmap()); } catch (IOException e) { e.printStackTrace(); } } public static Drawable loadImageFromUrl(String url) throws IOException { URL m = new URL(url); InputStream i = (InputStream) m.getContent(); Drawable d = Drawable.createFromStream(i, "src"); return d; }
}
布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <!-- TODO 默认占位图 --> <wst.webview.ZoomableImageView android:id="@+id/show_webimage_imageview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:scaleType="matrix" android:src="@drawable/icon" /> <TextView android:id="@+id/show_webimage_imagepath_textview" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:textColor="#ffff0000" /> </LinearLayout>
Android WebView 和 javaScript的互相调用(二)相关推荐
- Android WebView 和 javaScript的互相调用(三)
原文出处:http://motalks.cn/2016/08/27/Android-WebView-JavaScript-2/ WebView相关阅读 Android WebView 和 javaSc ...
- Android WebView 和 javaScript的互相调用(一)
原文出处:http://blog.csdn.net/wangtingshuai/article/details/8631835 WebView相关阅读 Android WebView 和 javaSc ...
- Android WebView与JavaScript交互详解
近期工作项目中遇到Android的WebView与js交互问题,之前也知道有这方面的技术可以实现.但在用的过程中,却发现还是需要用电心思. 现把我所了解的分享给大家,希望可以帮助到做类似项目的童鞋. ...
- android webview打印,javascript - 如何在Android Webview中使网站上的打印按钮工作? - 堆栈内存溢出...
我的网站上有一个模式按钮,在该按钮上附加了一个处理程序函数以打印模式. 该处理程序具有处理"仅打印模式"的代码,并最终运行window.print(). 该按钮的功能类似于浏览器中 ...
- Android WebView和JavaScript交互
JavaScript在现在的网页设计中用得很多,Android 的WebView可以载入网页,WebView也设计了与JavaScript通信的桥梁.这篇主要介绍一下WebViewk控件如何和Java ...
- Android WebView 性能优化
原文出处:http://motalks.cn/2016/09/11/Android-WebView-JavaScript-3/ WebView相关阅读 Android WebView 和 javaSc ...
- 【eoe Android特刊】第二十四期Android WebView
一.Android WebView是什么 1.1Aandroid WebView一些基本概念 在android手机中内置了一款高性能webkit内核浏览器,在SDK中封装为一个叫做WebView组件. ...
- webview java调用js_android WebView java与js相互调用
android WebView java与js相互调用 发布时间:2020-07-14 00:42:42 来源:51CTO 阅读:454 作者:向往宇宙 android webView js 使用 1 ...
- Android WebView开发(四):WebView独立进程解决方案
一.Android WebView开发(一):基础应用 二.Android WebView开发(二):WebView与Native交互 三.Android WebView开发(三):WebView性能 ...
最新文章
- django项目转pyc_问题网址.pycdjango生成的文件,如何修复?
- 跟锦数学2017年04月
- MVC是什么?(转载)
- 十一、飞机大战(IVX 快速开发教程)
- 80 个例子,彻底掌握Python日期时间处理
- 腾讯云发布“小程序·云开发十大优秀实践”,猫眼、唯品会、香格里拉等入选
- 【Python】EXCEL转Json
- seaborn—seaborn.boxplot绘制箱型图
- python打包成exe
- Mac Os的java开发环境以及MySql环境配置
- 用户列表 html,用户列表.html
- java实现wps函数IRR,Excel表格技巧—如何用IRR函数算内部收益率
- 以下对python程序缩进格式描述错误的是_转载 | python二级选择题与分析(8)
- 南京市公安局电子警察系统数据库扩容和异地灾备公开招标采购公告
- SIM7600CE TCP AT指令
- 写在迷茫痛苦之后的三十岁
- LINUX定时清理文件定时任务
- 华为设备配置BGP负载分担
- 面试behavior questions 回答
- ui动画_ui后效动画指南