[[415600]]
想了解更多内容,请访问:
51CTO和华为官方合作共建的鸿蒙技术社区
https://harmonyos.51cto.com
1. 滑动事件的三个动作
2. 实现案例:按下、移动或松开都要修改文本的内容
3. 按下、滑动、松开 参数说明
4. 验证 按下、 移动、松开的过程,代码会不断去调用本类中的 onTouchEvent方法
- PRIMARY_POINT_DOWN:按下不松。
- POINT_MOVE:移动。
- PRIMARY_POINT_UP:抬起。
- true 表示继续执行后面的动作。
- false 表示不会继续执行后面的动作。
代码实现
ability_main
- ohos:id="$+id:dl"
- xmlns:ohos="http://schemas.huawei.com/res/ohos"
- ohos:height="match_parent"
- ohos:width="match_parent"
- ohos:alignment="center"
- ohos:orientation="vertical">
- ohos:id="$+id:text1"
- ohos:height="match_content"
- ohos:width="match_content"
- ohos:background_element="$graphic:background_ability_main"
- ohos:layout_alignment="horizontal_center"
- ohos:text="$string:mainability_HelloWorld"
- ohos:text_size="40vp"
- />
MainAbilitySlice
- package com.xdr630.listenerapplication.slice;
- import com.xdr630.listenerapplication.ResourceTable;
- import ohos.aafwk.ability.AbilitySlice;
- import ohos.aafwk.content.Intent;
- import ohos.agp.components.Component;
- import ohos.agp.components.DirectionalLayout;
- import ohos.agp.components.Text;
- import ohos.multimodalinput.event.TouchEvent;
- public class MainAbilitySlice extends AbilitySlice implements Component.TouchEventListener {
- Text text1 = null;
- @Override
- public void onStart(Intent intent) {
- super.onStart(intent);
- super.setUIContent(ResourceTable.Layout_ability_main);
- //1.先找到整个布局对象
- DirectionalLayout dl = (DirectionalLayout) findComponentById(ResourceTable.Id_dl);
- text1 = (Text) findComponentById(ResourceTable.Id_text1);
- //2.给整个布局添加滑动事件
- //当我们在整个布局滑动的时候,就会调用本类中的onTouchEvent方法
- //在按下 移动、松开的过程,代码会不断去调用本类中的 onTouchEvent方法
- dl.setTouchEventListener(this);
- }
- @Override
- public void onActive() {
- super.onActive();
- }
- @Override
- public void onForeground(Intent intent) {
- super.onForeground(intent);
- }
- @Override
- public boolean onTouchEvent(Component component, TouchEvent touchEvent) {
- //参数1:component表示滑动的组件(布局也是一种组件,所以也可以用component表示布局对象)
- //实际上此时代表的就是DirectionalLayout布局对象,这个布局是铺满整个屏幕的
- //参数2:touchEvent表示动作对象(按下、滑动、抬起)
- //获取当前手指对屏幕进行操作(按下、滑动、抬起)
- int action = touchEvent.getAction();
- // 1:表示按下操作
- // 2:表示松开操作
- // 3. 表示滑动/移动操作
- if (action == TouchEvent.PRIMARY_POINT_DOWN){
- //只要写按下时需要运行的代码即可
- text1.setText("按下");
- }else if (action == TouchEvent.POINT_MOVE){
- //移动或滑动
- text1.setText("移动");
- }else if (action == TouchEvent.PRIMARY_POINT_UP){
- //松开或抬起
- text1.setText("松开");
- }
- return true;
- }
- }
可以看到1、2、3数字分别表示PRIMARY_POINT_DOWN(按下)、PRIMARY_POINT_UP(松开)、POINT_MOVE(移动),所以上面代码的参数也可以直接用数字代替,但为了更直观表达,建议使用参数,一目了然。
如:使用数字表示
- if (action == 1){
- //只要写按下时需要运行的代码即可
- text1.setText("按下");
- }else if (action == 3){
- //移动或滑动
- text1.setText("移动");
- }else if (action == 2){
- //松开或抬起
- text1.setText("松开");
- }
所以,经过验证:
在 按下 、移动、松开的过程,代码会不断去调用本类中的 onTouchEvent方法。
想了解更多内容,请访问:
51CTO和华为官方合作共建的鸿蒙技术社区
https://harmonyos.51cto.com