接口名:TouchEventListener
滑动事件里面分为三个动作:按下,移动,抬起
PRIMARY_POINT_DOWN:按下
POINT_MOVE:移动
PRIMARY_POINT_UP:抬起
手机坐标:
手机左上角的点为原点。向右为X轴。向下为Y轴。垂直于屏幕向上为Z轴。
方法返回值:
true表示继续执行后面的动作
false表示不会继续执行后面的动作
跟单击事件类似,滑动事件也有4种写法,这里采用当前类作为实现类这种写法,其他写法可以参见《单击事件的4种写法》。
①MainAbilitySlice.java文件
package com.example.yeman.slice; import com.example.yeman.ResourceTable; import ohos.aafwk.ability.AbilitySlice; import ohos.aafwk.content.Intent; import ohos.agp.components.Button; 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 txt; int count; @Override public void onStart(Intent intent) { super.onStart(intent); super.setUIContent(ResourceTable.Layout_ability_main); //通过id找到布局对象(其也可以理解是一种组件) DirectionalLayout dl = (DirectionalLayout) findComponentById(ResourceTable.Id_dl); //通过id找到文本框组件 txt = (Text) findComponentById(ResourceTable.Id_txt); //给整个布局添加滑动事件,当在整个布局上滑动时,就会不断调用本类中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) { //component表示滑动的哪个组件,布局也是一种组件,实际上这里示例就是在整个布局上进行的。 //touchEvent表示动作对象(按下,滑动,抬起)。 count++; //可以用来记录一下该方法被调用次数 //获取当前手指对于屏幕进行的操作(按下,滑动,抬起) int action = touchEvent.getAction(); //1表示按下,2表示抬起,3表示滑动(移动) if (action == TouchEvent.PRIMARY_POINT_DOWN){ txt.setText("按下" + count); }else if (action == TouchEvent.PRIMARY_POINT_UP){ txt.setText("抬起" + count); }else if (action == TouchEvent.POINT_MOVE){ txt.setText("滑动" + count); } return true; //返回值为false的话,调用一次后将不会再调用,即只能作用“按下”这个动作 } }
②ability_main.xml文件
<?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:txt" ohos:height="match_content" ohos:width="match_content" ohos:text="这里是文本框" ohos:text_size="100"/> </DirectionalLayout>