HarmonyOS實(shí)戰(zhàn)—滑動(dòng)事件的三個(gè)動(dòng)作
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)
Table of Contents
1. 滑動(dòng)事件的三個(gè)動(dòng)作
2. 實(shí)現(xiàn)案例:按下、移動(dòng)或松開都要修改文本的內(nèi)容
3. 按下、滑動(dòng)、松開 參數(shù)說明
4. 驗(yàn)證 按下、 移動(dòng)、松開的過程,代碼會(huì)不斷去調(diào)用本類中的 onTouchEvent方法
1. 滑動(dòng)事件的三個(gè)動(dòng)作
- 接口名:TouchEventListener
- 滑動(dòng)事件里面分為三個(gè)動(dòng)作:按下不松,移動(dòng),抬起。
- PRIMARY_POINT_DOWN:按下不松。
- POINT_MOVE:移動(dòng)。
- PRIMARY_POINT_UP:抬起。
- 方法返回值:
- true 表示繼續(xù)執(zhí)行后面的動(dòng)作。
- false 表示不會(huì)繼續(xù)執(zhí)行后面的動(dòng)作。
- 涉及到如下三個(gè)動(dòng)作,根據(jù)用戶按下位置和松下位置,就可以辨別用戶是上、下、左、或右滑動(dòng)。
- 如:可以辨別出用戶是向右滑動(dòng)(簡稱:右滑)
- 如:可以辨別出用戶是向下滑動(dòng)(簡稱:下滑)
2. 實(shí)現(xiàn)案例:按下、移動(dòng)或松開都要修改文本的內(nèi)容
- 因?yàn)橐谡麄€(gè)屏幕上滑動(dòng),所以要給最外面的布局DirectionalLayout設(shè)置滑動(dòng)事件,加個(gè)id
- 按下、移動(dòng)或抬起都要修改文本的內(nèi)容
- 新建項(xiàng)目:ListenerApplication4
代碼實(shí)現(xiàn)
ability_main
- 采用默認(rèn)生成的Text文本內(nèi)容,在此基礎(chǔ)上給DirectionalLayout布局和Text組件分別加上id
- <?xml version="1.0" encoding="utf-8"?>
- <DirectionalLayout
- 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">
- <Text
- 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"
- />
- </DirectionalLayout>
MainAbilitySlice
- 采用當(dāng)前類作為實(shí)現(xiàn)類接口的方式編寫
- 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.先找到整個(gè)布局對(duì)象
- DirectionalLayout dl = (DirectionalLayout) findComponentById(ResourceTable.Id_dl);
- text1 = (Text) findComponentById(ResourceTable.Id_text1);
- //2.給整個(gè)布局添加滑動(dòng)事件
- //當(dāng)我們?cè)谡麄€(gè)布局滑動(dòng)的時(shí)候,就會(huì)調(diào)用本類中的onTouchEvent方法
- //在按下 移動(dòng)、松開的過程,代碼會(huì)不斷去調(diào)用本類中的 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) {
- //參數(shù)1:component表示滑動(dòng)的組件(布局也是一種組件,所以也可以用component表示布局對(duì)象)
- //實(shí)際上此時(shí)代表的就是DirectionalLayout布局對(duì)象,這個(gè)布局是鋪滿整個(gè)屏幕的
- //參數(shù)2:touchEvent表示動(dòng)作對(duì)象(按下、滑動(dòng)、抬起)
- //獲取當(dāng)前手指對(duì)屏幕進(jìn)行操作(按下、滑動(dòng)、抬起)
- int action = touchEvent.getAction();
- // 1:表示按下操作
- // 2:表示松開操作
- // 3. 表示滑動(dòng)/移動(dòng)操作
- if (action == TouchEvent.PRIMARY_POINT_DOWN){
- //只要寫按下時(shí)需要運(yùn)行的代碼即可
- text1.setText("按下");
- }else if (action == TouchEvent.POINT_MOVE){
- //移動(dòng)或滑動(dòng)
- text1.setText("移動(dòng)");
- }else if (action == TouchEvent.PRIMARY_POINT_UP){
- //松開或抬起
- text1.setText("松開");
- }
- return true;
- }
- }
- 運(yùn)行:
- 按下:
- 移動(dòng):
- 松開:
3. 按下、滑動(dòng)、松開 參數(shù)說明
可以看到1、2、3數(shù)字分別表示PRIMARY_POINT_DOWN(按下)、PRIMARY_POINT_UP(松開)、POINT_MOVE(移動(dòng)),所以上面代碼的參數(shù)也可以直接用數(shù)字代替,但為了更直觀表達(dá),建議使用參數(shù),一目了然。
如:使用數(shù)字表示
- if (action == 1){
- //只要寫按下時(shí)需要運(yùn)行的代碼即可
- text1.setText("按下");
- }else if (action == 3){
- //移動(dòng)或滑動(dòng)
- text1.setText("移動(dòng)");
- }else if (action == 2){
- //松開或抬起
- text1.setText("松開");
- }
4. 驗(yàn)證 按下、 移動(dòng)、松開的過程,代碼會(huì)不斷去調(diào)用本類中的 onTouchEvent方法
- 在上述代碼的基礎(chǔ)上,定義成員變量計(jì)數(shù)器 int count = 0
- onTouchEvent方法被調(diào)用一次,就給加上一次
- 把count放在每次操作的后面
- 當(dāng)按下時(shí),是第一次調(diào)用,count應(yīng)該為1
- 移動(dòng)的時(shí)候隨著鼠標(biāo)不斷移動(dòng),也就會(huì)不斷地調(diào)用onTouchEvent方法,count就會(huì)遞增
- 當(dāng)松開后,也會(huì)調(diào)用一次,count在前面數(shù)值的基礎(chǔ)上加1
所以,經(jīng)過驗(yàn)證:
在 按下 、移動(dòng)、松開的過程,代碼會(huì)不斷去調(diào)用本類中的 onTouchEvent方法。
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)