Android Studio中Touch监听器的使用

在输入密码登录某个系统或者游戏时,在密码框的右侧有一个眼睛标志的按键,如图1所示。

图1 登录界面的眼睛按键

按住不放该按键,此时会显示用户在密码框中输入的密码,松开该按键后,密码恢复成加密状态。在Android Studio中,以上过程可以通过按键的触摸监听器(Touch Listener)来实现。代码如图2所示。

图2 触摸监听器的代码

1 Button类的setOnTouchListner()方法

从图2可以看出,bt5是Button类的对象,并且已经和按键进行了关联。通过bt5的setOnTouchListner()方法为按键添加触摸监听器,如图2①所示,该方法的用法如下所示。

​public void setOnTouchListener (View.OnTouchListener l)

其中,参数l是View.OnTouchListener接口类型的对象,setOnTouchListner()方法的作用是注册一个回调方法,当按键上发生了触摸事件时,可以调用该回调方法,即参数l。

2 View.OnTouchListener接口

图2②中所示的View.OnTouchListener是一个接口,专门用于处理发生在控件上的触摸事件。该方法中有一个公共的抽象方法onTouch,当触摸事件发生给控件时,就会调用该方法,如图2③所示。添加触摸监听器,就必须重写这个抽象的方法。抽象方法onTouch的格式如下所示。

abstract boolean onTouch(View v, MotionEvent motionEvent)

该函数的参数v表示发生触摸事件的控件;参数motionEvent是MotionEvent类的对象,该对象包含了触摸事件的相关信息。在onTouch中,通过参数motionEvent获取冲模事件的具体动作,通过switch…case语句,对不同的动作进行不同的处理,如图3所示。

图3 onTouch()方法的代码

3 MotionEvent类

MotionEvent类用于表示鼠标、手写笔或者手势的移动事件;图3①中通过MotionEvenet类的对象motionEvent调用了该类的getAction()方法,该方法的作用是获取动作的类型,将该类型作为返回值。图3②中的MotionEvent.ACTION_DOWN表示按压的动作的开始,图3③中的MotionEvent.ACTION_UP表示按压动作的结束,在程序中,对于不同的动作要进行不同的处理。

相关链接1 onTouch()方法的返回值,为控件添加了触摸监听器后,在控件处理该触摸事件之前,onTouch()方法会先处理该事件。onTouch()方法的返回值类型是boolean,当返回值是false时,触摸事件会传递给控件继续处理,当该方法返回true时,触摸事件将不会传递给控件处理。图3中,当有MotionEvent.ACTION_DOWNMotionEvent.ACTION_UP这两个触摸事件发生时,onTouch()方法的返回值是true,表示这两个动作不会再传递给按键进行后续处理,因此再为该Button添加点击监听器(setOnClickListerner)不起作用;如果onTouch()方法对于MotionEvent.ACTION_DOWNMotionEvent.ACTION_UP这两个触摸事件的返回值时false时,表示这两个动作还会传递给按键进行后续处理,此时该Button添加点击监听器就会起作用。

4 代码实现

在onTouch()方法中,有如图4所示的代码。

图4 实现查看密码的代码

其中,et1是与输入密码的输入框关联的变量,setInputType()方法的作用是设置该输入框的属性,当用户开始按压该眼睛按键时,将输入框的“InputType.InputType”属性设置“TYPE_NULL”(图4①),该值的含义是没有指定明确的类型,即取消密码属性,此时的效果如图5所示;当用户结束按压该眼睛按键时,将编辑框的“InputType”属性设置InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD”,即恢复编辑框的密码属性,此时的效果如图6所示。

图5 开始按压眼睛按键

图6 结束按压眼睛按键

Android Studio 中的触控事件处理主要是通过Android的各种触摸监听器(Listeners)完成的,例如View.OnTouchListener、GestureDetector、MotionEvent等。以下是基本流程: 1. **OnTouchListener**:这是最基础的监听器,用于接收用户对View的轻击(touchDown)、滑动(motion)以及抬起(touchUp)。你可以重写onTouch(View v, MotionEvent event)方法,在其中检查event的动作类型并执行相应的操作。 ```java view.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: // 按下动作处理 break; case MotionEvent.ACTION_UP: // 松开动作处理 break; // 其他ACTION_...动作,如ACTION_MOVE等 } return false; // 返回true继续监听,false则不再监听 } }); ``` 2. **GestureDetector**: 提供了更复杂的手势识别功能,如长按、双指缩放、平移等。需要创建一个GestureDetector实例,并设置其Callback。 ```java GestureDetector gestureDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener() { @Override public void onLongPress(MotionEvent e) { // 长按处理 } }); ``` 3. **MotionEvent**: 直接操作MotionEvent可以获取更详细的触控信息,比如位置坐标、压力值等。 在处理触控事件时,记得在合适的地方开启事件分发链条,通常是在`requestDisallowInterceptTouchEvent(true)`和`requestDisallowInterceptTouchEvent(false)`之间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值