背景

咱的博客园APP,是通过一个WebView来展示新闻的详情的。新闻必然是图文并茂的,无论是支持离线缓存还是加速新闻的打开速度, 都需要咱们打通本地存储与WebView之间的桥梁。

思路

1:首先把WebView的绝对路径设置为我们图片存储的根目录

修改第一个参数以指向本地存储目录,这样就可以使用相对路径引用该目录下的本地文件了。如

webView.loadDataWithBaseURL("file:///storage/emulated/0/Android/data/zhexian.learn.cnblogs/files/zCache/", htmlContent, "text/html", "utf-8", null);

2:把图片资源存储到本地

针对博客园新闻实体,dudu老大贴心提供了ImageUrl字段,把该新闻用到的图片地址用分号隔离,拼接成一个字符串,参考例子

这种数据源我们处理起来自然是轻松加愉快了。

但是如果没有这个数据源的话,我们也可以使用正则表达式,遍历新闻内容的img标签进行处理。

咱本地存储规则是这样的,砍掉第三个/号之前的内容,将/转换成_号存储在缓存文件夹。

比如http://images2015.cnblogs.com/news/66372/201508/66372-20150826093938187-2008871077.jpg

处理后就是news_66372_201508_66372-20150826093938187-2008871077.jpg文件

3:遍历img标签,把src指向本地文件

标签的正则表达式如下

Pattern patternImgSrc = Pattern.compile("<img(.+?)src=\"(.+?)\"(.+?)/>");

在正则遍历的循环里,我们判断当前匹配到的src路径,本地是否存在,如果存在,则替换成本地路径,否则是使用占位图还是直接下载,取决于你的wifi无图策略。

4:添加js交互

在新闻的详情页面,用到js交互有两个地方

1:如果用户选择无图省流量模式,此时图片还是用占位图的,用户点击该占位图,可以加载原图替换

2:如果已经加载了图片,用户点击该图片时,可以查看大图

这里的知识涉及到一小部分android与js交互,以及js处理图片标签。

前者网上一大堆,就不细说,后者代码很简短,就贴上来

function showImage (obj,src) {
if (obj.src.indexOf('click_load_day.png')<0 && obj.src.indexOf('click_load_night.png')<0)
Android.displayImage(src);
else
obj.src=src;
}

最后的效果图如下

如:1占位图

2:点击之后使用原图替换掉占位图

3:点击替换后的图片,启动系统原生查看图片程序Activity。

时间有点赶,暂时写到这里,细节请参考站的博客园app,源码地址

【Android】WebView读取本地图片的更多相关文章

  1. Android ImageView显示本地图片

    Android ImageView 显示本地图片 布局文件 <?xml version="1.0" encoding="utf-8"?> <R ...

  2. window.open()读取本地图片简单使用总结

    最近做了一个项目,需要读取本地图片出来,问了一些人,感觉在数据库中存取路径比较合适,故做此方法. 后台查询出来的路径

  3. js读取本地图片并显示

    抄自 http://blog.csdn.net/qiulei_21/article/details/52785191 js读取本地图片并显示 第一种方法比较好 版权声明:本文为博主原创文章,未经博主允 ...

  4. pyqt5 多线程+定时器+读取本地图片

    前言 一个程序界面有多个button 按钮时,单击一个按钮,若此按钮对应的信号正在执行,且还未执行完毕: 此时再次单击另外一个按钮,就会出现假死状态. 这个时候我们就需要使用 多线程去解决 多线程+定 ...

  5. FileReader:读取本地图片文件并显示

    最近忙得比狗还惨,导致长时间没能更新文章,真心对不住啊.抽空整理了下关于在页面上读取和显示本地图片的实例文章,本文通过实例讲解如何使用支持FileReader浏览器的用户将能够通过一个file inp ...

  6. Android之获取本地图片并压缩方法

    这两天在做项目时,做到上传图片功能一块时,碰到两个问题,一个是如何获取所选图片的路径,一个是如何压缩图片,在查了一些资料和看了别人写的后总算折腾出来了,在此记录一下. 首先既然要选择图片,我们就先要获 ...

  7. UE4 读取本地图片

    参考链接:https://answers.unrealengine.com/questions/235086/texture-2d-shows-wrong-colors-from-jpeg-on-ht ...

  8. phonegap(cordova) 自己定义插件代码篇(四)----读取本地图片

    有时候确实知道本地图片地址,要获取到base64  /** * 获取本地图片,包括路径和压缩后的 base64 */ (function (cordova) { var define = cordov ...

  9. Android WebView选择本地文件上传

    This sample demonstrate android webview choose file to upload. I just implement the client code ,the ...

随机推荐

  1. VS2008设置快捷键Ctrl+W关闭当前打开的文本编辑器窗口

    好多友好的软件关闭多标签页的当前页时都有Ctrl+W的快捷键,如Chrome浏览器,使用起来还是很方便的. 但是作为程序员,使用VS2008时有时会打开好多C++或C#源文件,需要关闭某个源文件时你需 ...

  2. 编程之美 set 7 求数组中的最长递增子序列

    解法 1. 假设在目标数组 array[] 的前 i 个元素中, 最长递增子序列的长度为 LIS[i] 那么状态转移方程为 LIS[i] = max(1, LIS[k]+1) array[i+1] & ...

  3. windows环境通过cmd命令到ftp上下载文件到linux服务器

    转自:http://jingyan.baidu.com/article/6525d4b1300912ac7d2e941b.html

  4. Socket通信编程实例(SIB和SS'SOB)

    客户端: package socket; import java.io.BufferedReader; import java.io.IOException; import java.io.Input ...

  5. c#基础 第一讲

    using System;using System.Collections.Generic; using System.Text; namespace MYTest{ class Program { ...

  6. jQuery设置内容和属性方

    何问起 hovertree.com 设置内容 - text().html() 以及 val()text() - 设置或返回所选元素的文本内容html() - 设置或返回所选元素的内容(包括 HTML ...

  7. POJ3272 Cow Traffic

    题目链接:http://poj.org/problem?id=3272 题目意思:n个点m条边的有向图,从所有入度为0的点出发到达n,问所有可能路径中,经过的某条路的最大次数是多少.边全是由标号小的到 ...

  8. hdu2254 奥运 矩阵的应用

    hdu2254 奥运 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2254 题意:题目让我们求得是的可以得到的金牌数量,而和金牌数量=在t1到t2天( ...

  9. jQuery中animate设置属性的一个问题

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. Network Security Services If you want to add support for SSL, S/MIME, or other Internet security standards to your application, you can use Network Security Services (NSS) to implement all your securi

    Network Security Services | MDN https://developer.mozilla.org/zh-CN/docs/NSS 网络安全服务 (NSS) 是一组旨在支持支持安 ...