天天看點

HarmonyOS實戰—滑動事件的三個動作1. 滑動事件的三個動作2. 實作案例:按下、移動或松開都要修改文本的内容3. 按下、滑動、松開 參數說明4. 驗證 按下、 移動、松開的過程,代碼會不斷去調用本類中的 onTouchEvent方法

1. 滑動事件的三個動作

  • 接口名:

    TouchEventListener

  • 滑動事件裡面分為三個動作:按下不松,移動,擡起。
PRIMARY_POINT_DOWN:按下不松。
POINT_MOVE:移動。
PRIMARY_POINT_UP:擡起。           
  • 方法傳回值:
true 表示繼續執行後面的動作。
false 表示不會繼續執行後面的動作。           
  • 涉及到如下三個動作,根據使用者按下位置和松下位置,就可以辨識使用者是上、下、左、或右滑動。
HarmonyOS實戰—滑動事件的三個動作1. 滑動事件的三個動作2. 實作案例:按下、移動或松開都要修改文本的内容3. 按下、滑動、松開 參數說明4. 驗證 按下、 移動、松開的過程,代碼會不斷去調用本類中的 onTouchEvent方法
  • 如:可以辨識出使用者是向右滑動(簡稱:右滑)
HarmonyOS實戰—滑動事件的三個動作1. 滑動事件的三個動作2. 實作案例:按下、移動或松開都要修改文本的内容3. 按下、滑動、松開 參數說明4. 驗證 按下、 移動、松開的過程,代碼會不斷去調用本類中的 onTouchEvent方法
  • 如:可以辨識出使用者是向下滑動(簡稱:下滑)
HarmonyOS實戰—滑動事件的三個動作1. 滑動事件的三個動作2. 實作案例:按下、移動或松開都要修改文本的内容3. 按下、滑動、松開 參數說明4. 驗證 按下、 移動、松開的過程,代碼會不斷去調用本類中的 onTouchEvent方法

2. 實作案例:按下、移動或松開都要修改文本的内容

  • 因為要在整個螢幕上滑動,是以要給最外面的布局

    DirectionalLayout

    設定滑動事件,加個

    id

  • 按下、移動或擡起都要修改文本的内容
  • 建立項目:ListenerApplication4
  • 代碼實作

ability_main

  • 采用預設生成的Text文本内容,在此基礎上給

    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

  • 采用目前類作為實作類接口的方式編寫
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;
    }
}           
  • 運作:
HarmonyOS實戰—滑動事件的三個動作1. 滑動事件的三個動作2. 實作案例:按下、移動或松開都要修改文本的内容3. 按下、滑動、松開 參數說明4. 驗證 按下、 移動、松開的過程,代碼會不斷去調用本類中的 onTouchEvent方法
  • 按下:
HarmonyOS實戰—滑動事件的三個動作1. 滑動事件的三個動作2. 實作案例:按下、移動或松開都要修改文本的内容3. 按下、滑動、松開 參數說明4. 驗證 按下、 移動、松開的過程,代碼會不斷去調用本類中的 onTouchEvent方法
  • 移動:
HarmonyOS實戰—滑動事件的三個動作1. 滑動事件的三個動作2. 實作案例:按下、移動或松開都要修改文本的内容3. 按下、滑動、松開 參數說明4. 驗證 按下、 移動、松開的過程,代碼會不斷去調用本類中的 onTouchEvent方法
  • 松開:
HarmonyOS實戰—滑動事件的三個動作1. 滑動事件的三個動作2. 實作案例:按下、移動或松開都要修改文本的内容3. 按下、滑動、松開 參數說明4. 驗證 按下、 移動、松開的過程,代碼會不斷去調用本類中的 onTouchEvent方法

3. 按下、滑動、松開 參數說明

HarmonyOS實戰—滑動事件的三個動作1. 滑動事件的三個動作2. 實作案例:按下、移動或松開都要修改文本的内容3. 按下、滑動、松開 參數說明4. 驗證 按下、 移動、松開的過程,代碼會不斷去調用本類中的 onTouchEvent方法
HarmonyOS實戰—滑動事件的三個動作1. 滑動事件的三個動作2. 實作案例:按下、移動或松開都要修改文本的内容3. 按下、滑動、松開 參數說明4. 驗證 按下、 移動、松開的過程,代碼會不斷去調用本類中的 onTouchEvent方法
  • 可以看到

    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("松開");
    }           

4. 驗證 按下、 移動、松開的過程,代碼會不斷去調用本類中的 onTouchEvent方法

  • 在上述代碼的基礎上,定義成員變量計數器

    int count = 0

HarmonyOS實戰—滑動事件的三個動作1. 滑動事件的三個動作2. 實作案例:按下、移動或松開都要修改文本的内容3. 按下、滑動、松開 參數說明4. 驗證 按下、 移動、松開的過程,代碼會不斷去調用本類中的 onTouchEvent方法
  • onTouchEvent方法被調用一次,就給加上一次
HarmonyOS實戰—滑動事件的三個動作1. 滑動事件的三個動作2. 實作案例:按下、移動或松開都要修改文本的内容3. 按下、滑動、松開 參數說明4. 驗證 按下、 移動、松開的過程,代碼會不斷去調用本類中的 onTouchEvent方法
  • count

    放在每次操作的後面
HarmonyOS實戰—滑動事件的三個動作1. 滑動事件的三個動作2. 實作案例:按下、移動或松開都要修改文本的内容3. 按下、滑動、松開 參數說明4. 驗證 按下、 移動、松開的過程,代碼會不斷去調用本類中的 onTouchEvent方法
  • 當按下時,是第一次調用,

    count

    應該為

    1

HarmonyOS實戰—滑動事件的三個動作1. 滑動事件的三個動作2. 實作案例:按下、移動或松開都要修改文本的内容3. 按下、滑動、松開 參數說明4. 驗證 按下、 移動、松開的過程,代碼會不斷去調用本類中的 onTouchEvent方法
  • 移動的時候随着滑鼠不斷移動,也就會不斷地調用

    onTouchEvent

    方法,

    count

    就會遞增
HarmonyOS實戰—滑動事件的三個動作1. 滑動事件的三個動作2. 實作案例:按下、移動或松開都要修改文本的内容3. 按下、滑動、松開 參數說明4. 驗證 按下、 移動、松開的過程,代碼會不斷去調用本類中的 onTouchEvent方法
  • 當松開後,也會調用一次,

    count

    在前面數值的基礎上加

    1

HarmonyOS實戰—滑動事件的三個動作1. 滑動事件的三個動作2. 實作案例:按下、移動或松開都要修改文本的内容3. 按下、滑動、松開 參數說明4. 驗證 按下、 移動、松開的過程,代碼會不斷去調用本類中的 onTouchEvent方法
  • 是以,經過驗證:

在 按下 、移動、松開的過程,代碼會不斷去調用本類中的 onTouchEvent方法。

繼續閱讀