然后再来看一下效果图:

保存图片

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xJCmIdzN-1630942827376)(https://user-gold-cdn.xitu.io/2018/1/11/160e418e435c50e9?imageslim)]

识别包含普通文字的二维码:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0XNmeBCs-1630942827378)(https://user-gold-cdn.xitu.io/2018/1/11/160e4812ed2b565a?imageslim)]

识别包含网址的二维码:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LQNB2XT9-1630942827379)(https://user-gold-cdn.xitu.io/2018/1/11/160e485ab8c9c071?imageslim)]

上述功能所用到的类和库:

  • 获得长按内容:WebView.HitTestResult
  • 弹框列表:DialogFragment
  • 图片下载:Glide
  • 二维码识别:Zxing

实现要点

记录长按位置

继承WebView记录触摸位置:

 @Overridepublic boolean onInterceptTouchEvent(MotionEvent event) {touchX = (int) event.getRawX();touchY = (int) event.getRawY();return super.onInterceptTouchEvent(event);}

弹框我选择DialogFragment而不是poupwindow的原因是poupwindow的显示通常需要依托另一个View,而且在7.0以上有兼容问题。 判断长按位置的内容类型是否是图片:

获取图片信息

 setOnLongClickListener(new View.OnLongClickListener() {public boolean onLongClick(View v) {WebView.HitTestResult result = getHitTestResult();if (null == result)return false;int type = result.getType();switch (type) {case WebView.HitTestResult.EDIT_TEXT_TYPE: // 选中的文字类型break;case WebView.HitTestResult.PHONE_TYPE: // 处理拨号break;case WebView.HitTestResult.EMAIL_TYPE: // 处理Emailbreak;case WebView.HitTestResult.GEO_TYPE: //  地图类型break;case WebView.HitTestResult.SRC_ANCHOR_TYPE: // 超链接break;case WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE: // 带有链接的图片类型case WebView.HitTestResult.IMAGE_TYPE: // 处理长按图片的菜单项String url = result.getExtra();if (mOnSelectItemListener != null && url != null && URLUtil.isValidUrl(url)) {mOnSelectItemListener.onSelected(touchX, touchY, result.getType(), url);}return true;case WebView.HitTestResult.UNKNOWN_TYPE: //未知break;}return false;}});

在手指长按位置处弹出弹框

HitTestResult是一个实体类,只记录两个信息:当选选择内容的类型和内容的具体值。可以看到通过WebView.HitTestResult,我们可以获得除了图片外的很多内容类型。当然这里我们只需要判断是否是图片就好了,然后将长按位置和url一起回调给外层。在手指长按处显示弹框,主要就是DialogFragment显示位置的设定了:

 public void onStart() {super.onStart();Dialog dialog = getDialog();if (dialog != null) {Window window = dialog.getWindow();if (window != null) {WindowManager.LayoutParams lp = window.getAttributes();window.setGravity(Gravity.LEFT | Gravity.TOP);lp.x = LocationX;//横坐标位置lp.y = LocationY;//纵坐标位置
## 推荐学习资料* Android进阶学习全套手册![](https://img-blog.csdnimg.cn/img_convert/950effc01c9cb7eb80e119b7e58fd187.png)* Android对标阿里P7学习视频![](https://img-blog.csdnimg.cn/img_convert/0d3e2b1997ec04232722a60cc354849e.png)* BAT TMD大厂Android高频面试题![](https://img-blog.csdnimg.cn/img_convert/e9996c073579a3ab270f11861262d61f.png)...(img-uqyPFRO0-1630942827383)]* BAT TMD大厂Android高频面试题[外链图片转存中...(img-4XTZTH96-1630942827384)]**[CodeChina开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》](https://codechina.csdn.net/m0_60958482/android_p7)**

WebView实现长按保存图片 长按识别二维码,看完吊打面试官相关推荐

  1. 移动端H5(JavaScript)识别二维码功能

    前言 时隔一年多, 再次接触到H5识别二维码功能,这次直接写个demo方便大家学习和使用.(其实是方便自己抄自己代码-). 直接上代码 QRcode下载地址 长的好看的都点⭐了!!! <!DOC ...

  2. 微信H5实现网页长按保存图片及识别二维码

    实现微信H5实现网页长按保存图片及识别二维码 使用工具 html2canvas 官方文档 html2canvas.hertzen.com/ canvas2image github.com/hongru ...

  3. 微信小程序web-view 实现长按识别二维码

    小程序长按识别二维码, 网页在小程序中长按识别二维码,web-view长按识别二维码 效果图: html 代码: <!DOCTYPE html> <html><head& ...

  4. uniapp 对富文本中的图片预览及长按图片识别二维码/保存图片

    uniapp 对富文本中的图片预览及长按图片识别二维码/保存图片 富文本一定要使用uniapp提供的<rich-text>标签,不要使用 v-html 因为<rich-text> ...

  5. webview长按图片识别二维码

    webview长按图片识别二维码 第一次写博客,主要是做这个功能是临时让加的功能,当时一头雾水,就想着用zxing,但是具体怎么做也不太清楚,然后就查了很多资料,所以在此记录一下. 导入zxing包 ...

  6. h5嵌入微信小程序webView长按识别二维码

    1.h5页面用于渲染图片 <div id="app"><div class="priview-img"><imgv-for=&qu ...

  7. 移动端(ios and android)长按识别二维码(含js与原生互调)

    这篇文章就整理下移动端长按识别二维码的实现吧!实现方式可以分为三种 一.长按原生控件,直接获取控件中的图片数据(src或background) 二.长按原生控件,截图识别 三.长按web中的图片,ap ...

  8. 微信小程序如何支持长按识别二维码功能

    1.previewImage 小程序wxml <image src="{{image}}" bindtap="imgLoad"></image ...

  9. 微信小程序长按识别二维码,小程序相关问题总结

    微信小程序长按识别二维码,小程序相关问题总结 开发小程序中,长按识别二维码,小程序码跳转,已知问题整理: 小程序中,不支持长按识别二维码,和小程序码. 可利用小程序 图片预览功能识别 小程序码并进行跳 ...

最新文章

  1. iOS官方Sample大全
  2. iphone投屏_iPhone投屏电视机/投影仪用这个方法很简单,媲美华为PC模式
  3. ECCV 2020 大规模实例分割挑战赛(LVIS Challenge)冠军方案
  4. ktor框架用到了netty吗_Netty系列相关面试题汇总
  5. 十二、添加RD 授权角色
  6. SQL Server游标使用快速上手
  7. ios开发自定义Cell分割线(分隔线)选中(点击时)时消失
  8. scala连接mongodb_MongoDB 的用户配置与基于Scala的使用
  9. mt3dgis 视频教程
  10. Excel与对齐的文本文件互转
  11. TX2--Building OpenCV for Tegra with CUDA
  12. Android批量打包-如何一秒内打几十个apk渠道包
  13. vue项目中canvas两张图片生成合并成一张图片 canvas二维码放图片上
  14. 学习SVM(五)理解线性SVM的松弛因子
  15. Laravel 5 - Trait method can has not been applied, because there are collisions with other trai
  16. 润雅信息完成B轮融资 大数据平台赋能汽车销售 1
  17. Unity 利用像素点在图片上画线(RawImage)
  18. 无人机自动悬停的实现方法(大疆无人机为例)
  19. cocos2dx3.x的TableView使用
  20. 计算机开始菜单设置方法,开始菜单不见了,教您Win7开始菜单不见了如何解决

热门文章

  1. Mac版Sublime快捷键
  2. windows 下.bat 文件双击无法运行
  3. 【数据集合集】最全最新——智能交通和无人驾驶相关数据集
  4. 三维空间点的直线方程拟合(最小二乘法)
  5. 采样保持电路简介:实现要求、基本组成、基本类型、性能参数、典型应用
  6. CSS 布局实例系列(三)如何实现一个左右宽度固定,中间自适应的三列布局——也聊聊双飞翼
  7. IT程序员副业兼职平台——高年薪的一个选择
  8. sap服务器数据库配置文件,安装和配置 SAP 和数据库
  9. 东华大学计算机专业怎么样?,东华大学好就业吗?东华大学就业率怎么样?
  10. 单纯形法只有两个约束条件_线性规划之单纯形法【超详解+图解】