Android中的神器-放大镜

一、前言

在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的内容。
放大镜功能

三、观后语

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

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值