文章目录

  • 一、前言
  • 二、放大镜的使用
    • 2.1 API调用
    • 2.2 在用户交互中使用放大镜
  • 三、观后语

一、前言

在Android 9(API level 28)及以上版本,支持放大镜功能,这个功能可以提高文本插入、选择的用户体验,可供用户看清细小的文字,例如:地图上的地名。放大镜功能在系统控件,例如:TextViewEditTextWebView中已经集成。效果如下图:

不过可惜的是,放大镜功能只能通过系统API调用,也就是只能在Android 9(API level 28)及以上版本中使用,没有提供可用与替代的支持库。

二、放大镜的使用

2.1 API调用

放大镜功能的API调用也非常简单,简单来说可以拆分为以下几步:

  1. 获取需要放大镜功能的控件;
  2. 以控件对象作为参数,构建Magnifier放大镜对象;
  3. 显示放大镜;
  4. 隐藏放大镜。

如果放大镜对象创建后,需要更改放大镜的属性,还需要更新update放大镜,否则设置的属性将不会生效,详情请参考:Magnifier类详情

val view = findViewById<TextView>(R.id.tvMsg)
val m = Magnifier(view)
// 注意:显示放大境时(调用show()接口),确保添加放大镜功能的控件已经绘制完成,否则会出现空指针异常。
m.show(view.width / 2.0f, view.height / 2.0f)

在新的API中,创建Magnifier对象的方法采用Builder构建,通过构造函数的方式已被废弃。

2.2 在用户交互中使用放大镜

静止的放大镜并不能体现它的优点,如果在用户交互中使用放大镜功能,就能体验放大镜功能的好处,例如放大查看TextView细小的文本、选择文本时放大光标所在位置等,下面是一个简单的放大查看TextView文本的示例代码。


val view = findViewById<TextView>(R.id.tvMsg)val m = Magnifier(view)view.setOnTouchListener { v, event ->when (event.action) {MotionEvent.ACTION_DOWN, MotionEvent.ACTION_MOVE -> {val viewPosition = IntArray(2)v.getLocationOnScreen(viewPosition)m.show(event.rawX - viewPosition[0], event.rawY - viewPosition[1])}MotionEvent.ACTION_CANCEL, MotionEvent.ACTION_UP -> {m.dismiss()}}true
}

上面的例子就是放大手指触摸处的放大镜效果。

需要注意的是,如果在你添加放大镜功能控件上面添加了其他图层,放大镜也会放大图层上面的内容,换句话说,放大镜只会放大顶层所能看到的内容,并不是只放大显示创建放大镜时传入的控件的内容。如下图,在TextView上面添加了一个Button,当放大镜移动到Button上面时,显示的是Button的内容,而不是被遮挡的TextView的内容。

三、观后语

放大镜的功能可以提高用户体验,但是可惜的是并没有提供支持库兼容低版本系统,使用的局限性比较大,如果需要在自己的项目中使用,且项目需要兼容低版本系统,请做好版本兼容相关工作。

Android中的神器-放大镜相关推荐

  1. android libbfaac.so,Android中Json数据读取与创建

    一:  Json的特性和在数据交互中的地位就不用说了,直接看案例. 首先在android studio中创建assets文件目录,用于存放Json数据文件,android studio 1.3 默认项 ...

  2. Android中怎么破解游戏之修改金币数

    我们在玩游戏的时候总是会遇到一些东东需要进行购买的,但是我们可能又舍不得花钱,那么我们该怎么办呢?那就是用游戏外挂吧!我们这里说的是Android中的游戏,在网上搜索一下移动端游戏外挂,可能会找到一款 ...

  3. Android 屏幕适配神器ScreenMatch

    Android屏幕适配 一.smallestWidth限定符 适配(推荐) 1.smallestWidth 限定符适配原理 2.为什么选择 smallestWidth 限定符适配? 3.使用步骤(重点 ...

  4. Android安全测试神器大全

    在线分析 1. AndroTotal 2. Tracedroid 3. Visual Threat 4. Mobile Malware Sandbox 5. Appknox – 非免费 6. IBM ...

  5. 抓包工具Fidder详解(主要来抓取Android中app的请求)

    $*********************************************************************************************$ 博主推荐 ...

  6. 为何说Android ViewDragHelper是神器 (二)

    前言: 通过上一篇的为何说Android ViewDragHelper是神器 (一)中我们简单了解了ViewDragHelper的用法,然后实现了一个"view随手指滑动而滑动"的 ...

  7. Android中实现为TextView添加多个可点击的文本

    这篇文章主要介绍了Android中实现为TextView添加多个可点击的文本,可实现类似Android社交软件显示点赞用户并通过用户名称进入该用户主页的功能,是非常实用的技巧,需要的朋友可以参考下.具 ...

  8. android 弹出fragment,Android中ViewPager获取当前显示的Fragment

    前言 在项目中,有时会用到在ViewPager中显示同样类型的Fragment,同时这样的Fragment的个数是动态的,但是PagerAdapter没有给我们提供getCurrentFragment ...

  9. android 读取内部存储文件格式,Android中的数据储存之文件存储

    当我们在使用各种程序时,其实际上是在和各种数据打交道,当我们聊QQ,刷微博,看新闻,其实都是在和里面的数据交互 例如在聊天时发出的消息,以及在登录时输入的账号密码,其实都是瞬时数据,那什么是瞬时数据呢 ...

  10. android中一种不支持的lua操作

    今天写了一段lua代码,在win32中正常运行,在android中运行无效. 大概是这样的: ------file1.lua----- local t = {} t.str = "this ...

最新文章

  1. Parallel 并发编程实例
  2. 声明:此资源由本博客收集整理于网络,只用于交流学习,请勿用作它途。如有侵权,请联系, 删除处理。...
  3. 【有三说深度学习】深度学习前夕
  4. java中递归的概念_【Java】基础38:什么叫递归?
  5. 龙芯3A5000初样顺利交付流片
  6. linux下python版本升级,linux下升级python版本
  7. 如何提升员工体验 助力企业业务增长?这个棘手的问题终于被解决了!
  8. 在FL Studio中编辑视频中的音频
  9. 我国大陆地区省市区MySQL数据(1)
  10. Linux之进程管理——查看进程
  11. 友盟统计前台页面图表或文字的隐藏方法
  12. Android破解九宫格密码
  13. Docker错误合集
  14. html怎么给图片加鼠标滑过效果,jquery给图片添加鼠标经过时的边框效果
  15. Outlook2007备份邮件规则、联系人以及账号及在Outlook 2007中删除自动记忆的收件人...
  16. 名人投资加密货币:推动行业发展的重要力量(连载:四)
  17. ArcGIS10.6汉化教程以及安装包介绍
  18. 打造属于你自己的Mac 机器人助手
  19. E: Release file for http://xxx is not valid yet (invalid for another 8h 3min 53s). Updates for this
  20. ecmall mysql.php_ECMall支持SSL连接邮件服务器的配置方法详解

热门文章

  1. ​「5G消息」的最新消息
  2. 修改centos系统时间
  3. MT7628KN/MT7628AN处理器区别解析,参数对比
  4. windows批处理脚本bat命令解析【12】ECHO处于关闭状态
  5. 微信小程序解析php,微信小程序解析H5文件方法
  6. 快手抖音短视频如何解析去除视频水印
  7. 我的 CSDN 两周年创作纪念日
  8. IDEA汉化包插件无法下载解决办法
  9. 为你的Android应用构建窗口小部件(App Widget)
  10. 指导CoVaR,基于Copula、GARCH、DCC、分位数回归、藤VineCopula