Android点击WebView中的图片查看大图
Android点击WebView中的图片查看大图
WebView加载Html文本加载图片并同时实现获取图片下标
首先加载html文本
web_view.loadDataWithBaseURL(null, Content, "text/html", "UTF-8", null);/*** 获取HTML文件里面的IMG标签的SRC地址** @param htmlText 带html格式的文本* @return 图片集合*/public static List<String> GetHtmlImageSrcList(String htmlText){List<String> imgSrc = new ArrayList<String>();Matcher m = Pattern.compile("src=\"?(.*?)(\"|>|\\s+)").matcher(htmlText);while(m.find()){imgSrc.add(m.group(1));}return imgSrc;}
创建JavascriptInterface。JavascriptInterface是Google官方为我们提供的Javascript与Native通信的解决方案。这里创建一个类,名称为JavascriptInterface(可自定义),为其添加一个方法startPhotoActivity(),该方法接收图片地址,启动PhotoActivity显示大图。
public class JavascriptInterface { @android.webkit.JavascriptInterface public void startPhotoActivity(String imageUrl) { String [] urls=new String[listImg.size()];//这里是因为该图片查看大图是需要传一个图片数组,如果该图片查看器是需要一个图片集合,则无需将集合添加到数组for (int i = 0; i < listImg.size(); i++){urls[i]=listImg.get(i);}for (int i = 0; i < listImg.size(); i++) {//根据imageUrl来获取图片的下标,这里是通过imageUrl来匹配集合中的地址!如果相同则该地址在集合的下标即为imageUrl的下标String url = listImg.get(i).toString();if (imageUrl.equals(url)) {Intent intent = new Intent(getActivity(),ImagePagerActivity.class);intent.putExtra(ImagePagerActivity.EXTRA_IMAGE_URLS, urls);intent.putExtra(ImagePagerActivity.EXTRA_IMAGE_INDEX, i);startActivity(intent);}}}
}mWebView.addJavascriptInterface(new JavascriptInterface(), "mainActivity");
在assets中创建一个js.txt文本,实现JavaScript代码。我们需要编写一个函数,遍历所有的标签,为每个img对象添加onclick事件。当img执行onclick事件时,调用Java代码启动显示大图页面,并传递自身的src属性。
function()
{ // 获取"img"标签的对象的集合 var imgs = document.getElementsByTagName("img"); for(var i = 0; i < imgs.length; i++) { // 添加点击事件 imgs[i].onclick = function() { // "mainActivity"是在上面Java代码中创建的 mainActivity.startPhotoActivity(this.src); } }
}
JavaScript准备好之后,我们需要在网页加载完毕后,将其注入到网页中。WebView在页面加载完成时,会回调onPageFinished()方法,在这里实现js代码的注入。注入js代码的方法是通过调用WebView.loadUrl(“javascript:xxxxxx”)。
mWebView.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView webView, String s) { mWebView.loadUrl("javascript:(" + readJS() + ")()"); }
});private String readJS() { try { InputStream inStream = getAssets().open("js.txt"); ByteArrayOutputStream outStream = new ByteArrayOutputStream(); byte[] bytes = new byte[1024]; int len = 0; while ((len = inStream.read(bytes)) > 0) { outStream.write(bytes, 0, len); } return outStream.toString(); } catch (IOException e) { e.printStackTrace(); } return null; }
参考来源:
http://blog.csdn.net/ruancoder/article/details/53958773
Android点击WebView中的图片查看大图相关推荐
- webview中的图片相应事件相应 坑
需求: 点击webview中的图片相应事件,点击里面按钮相应事件.网页源代码中没有提供响应的javascript的方法,所以需要重新写方法 来响应时间 ,实现android和html代码互调 代码 红 ...
- Android实战场景 - 保存WebView中的图片到相册
去年同事写了一个 "在H5中保存图片到相册" 的功能,虽然有大致实现思路,实现起来也没问题,但是感觉同事考虑问题的很周全,当时候就想着去学习一下,但是项目太赶没顾得上,索性现在有时 ...
- 基于JavaScript实现移动端点击图片查看大图点击大图隐藏
今天找到了一个我用了很好的方法,点击缩略图,放大居中展示,且参数可调,亲测可靠. 代码使用意见,将下面的代码放到本地测试效果,可以用一张自己的照片,点击会放大,再次点击还原. 一.需求 点击图片查看 ...
- html点击小图标显示全屏查看大图,基于JavaScript实现移动端点击图片查看大图点击大图隐藏...
一.需求 点击图片查看大图,再点大图隐藏.多用于移动端,因为移动端屏幕小,可能需要查看大图. 二.代码 JQuery点击图片查看大图by starof .exampleImg { height:100 ...
- php图片点击查看大图,基于JavaScript实现移动端点击图片查看大图点击大图隐藏_javascript技巧...
一.需求 点击图片查看大图,再点大图隐藏.多用于移动端,因为移动端屏幕小,可能需要查看大图. 二.代码 JQuery点击图片查看大图by starof 三.技巧 因为移动端无法添加热点,最终一个解决方 ...
- Android在WebView中给图片设置点击事件
好久没有更新博客了,今天来个小知识点.我们知道在WebView中加载的是Html也面,在开发中都是Web前端人员写好以后给个链接我们去用webView进行loadUrl.但是有时突然产品想让你把加载回 ...
- android webview 获取图片,Android – 保存WebView中的图片
前言 项目中有需求在APP的Webview中长按图片可以保存.后来就去研究一下该怎么实现,顺便整理了一下. WebView基本配置 mWvContent.getSettings().setJavaSc ...
- iOS UILabel加载html点击图片查看大图 附demo
我们在有些时候,因为性能和加载时间的问题,需要用UILabel加载html的方式来代替webview. 大部分情况,UILabel都可以很好的展示出想要的效果,但是却不能满足点击查看大图的需求. 本解 ...
- android 抓取webview中的所有图片_如何一键提取PDF文档中的所有图片?
原标题:如何一键提取PDF文档中的所有图片? 目前PDF文档被大家广泛应用,主要是因为PDF文档在传输和转换的过程中比较稳定,所以PDF格式几乎是办公文件格式的首选.大家都知道PDF文档转换格式以及编 ...
最新文章
- mysql 从零开始_MySQL从零开始:01 数据库简介
- 洛谷 P2519 [HAOI2011]problem a
- Atitit it软件领域职称评级规定,广博方向。 目录 1. 软件工程师资格证	1 1.1. 法规规范 十大标准,三级五晋制。	1 1.2. 组织架构 域职称评级委员会	2 1.3. 人员职责流程表
- android textwatcher 获取当前控件,android api解析之TextWatcher
- putty远程linux系统时间修改,使用putty远程linux服务
- 【考研日记1】:看到2016年数学考的如此之难后
- CTF知识总结--MISC
- 经纬度PLT文件格式说明
- Gmail终于对中文用户开放注册! update:2008.5.6
- 终极选择---老男孩教育
- Python统计字符串中出现次数最多的人名
- 微信公众号开发(一)服务器配置
- 【全角/半角是什么】关于全角和半角的区别和使用
- XCODE - Failed to create provisioning profile
- 物联网平台thingsboard在Windows上的安装和部署
- Linux桌面对应的路径
- C语言第十一章课后程序设计题
- MOS管符号识别MOS管不同功能MOS管与寄生电容
- JVM(Java虚拟机模型、Java运行时数据区模型)
- SATA硬盘和IDE硬盘的区别