HarmonyOS之Java事件模块

事件的介绍

事件就是可以被识别的操作。常见的事件有单击双击长按和触摸事件
我们可以给本文,按钮等添加不同的事件,这样就可以实现交互功能

单击事件

ClickedListener有四种写法

  • 自己编写实现类
public class MainAbilitySlice extends AbilitySlice {
Text text1 = null;
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main);
//1.找到按钮
Button but1 = (Button) findComponentById(ResourceTable.Id_but1);
text1 = (Text) findComponentById(ResourceTable.Id_text1);
//2.给按钮绑定一个单击事件
but1.setClickedListener(new MyListener());
}
@Override
public void onActive() {
super.onActive();
}
@Override
public void onForeground(Intent intent) {
super.onForeground(intent);
}
}
class MyListener implements Component.ClickedListener{
@Override
public void onClick(Component component) {
//component:所有组件的父类
//参数:被点击的组件对象
//component.setText();
Button btu = (Button) component;
btu.setText("被点了");
}
}
  • 当前类实现接口(常用)
public class MainAbilitySlice extends AbilitySlice implements Component.ClickedListener {
Text text1 = null;
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main);
//1.找到按钮
Button but1 = (Button) findComponentById(ResourceTable.Id_but1);
text1 = (Text) findComponentById(ResourceTable.Id_text1);
//2.给按钮绑定一个单击事件
but1.setClickedListener(this);
}
@Override
public void onActive() {
super.onActive();
}
@Override
public void onForeground(Intent intent) {
super.onForeground(intent);
}
public void onClick(Component component) {
Button btu = (Button) component;
btu.setText("被点了-单击事件的第二种写法");
text1.setText("被点击了");
}
}
  • 匿名内部类,new一个类
public class MainAbilitySlice extends AbilitySlice {
Text text1 = null;
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main);
//1.找到按钮
Button but1 = (Button) findComponentById(ResourceTable.Id_but1);
text1 = (Text) findComponentById(ResourceTable.Id_text1);
//2.给按钮绑定一个单击事件
but1.setClickedListener(new Component.ClickedListener() {
@Override
public void onClick(Component component) {
Button btu = (Button) component;
btu.setText("被点了-单击事件的第三种写法");
text1.setText("被点击了");
}
});
}
@Override
public void onActive() {
super.onActive();
}
@Override
public void onForeground(Intent intent) {
super.onForeground(intent);
}
}
  • 方法引用
public class MainAbilitySlice extends AbilitySlice {
Text text1 = null;
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main);
//1.找到按钮
Button but1 = (Button) findComponentById(ResourceTable.Id_but1);
text1 = (Text) findComponentById(ResourceTable.Id_text1);
//2.给按钮绑定一个单击事件
but1.setClickedListener(this::onClick);
}
@Override
public void onActive() {
super.onActive();
}
@Override
public void onForeground(Intent intent) {
super.onForeground(intent);
}
public void onClick(Component component) {
Button btu = (Button) component;
btu.setText("被点了-单击事件的第二种写法");
text1.setText("被点击了");
}
}

滑动事件

TouchEvenListener

  • 三个动作,按下不松(PRIMARY_POINT_DOWN),移动(PRIMARY_MOVE),抬起(PRIMARY_POINT_UP)
  • 手机左上角的点为原点,向右为x轴,向下为Y轴。方法返回值,true表示继续执行后面的动作,false表示不会继续执行后面的动作
public class MainAbilitySlice extends AbilitySlice implements Component.TouchEventListener {
Text text1 = null;
int count = 0;
@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);
}
//记录按下时手指的位置
float startX = 0;
float startY = 0;
@Override
public boolean onTouchEvent(Component component, TouchEvent touchEvent) {
count++;
//参数一:component表示滑动的那个组件。(布局也是一种组件)
//实际上此时代表的就是那个DirectionalLayout这个布局对象。
//参数二:touchEvent 动作对象(按下,滑动,抬起)
//获取当前手指对屏幕进行的操作(按下,滑动,抬起)
int action = touchEvent.getAction();
//1 表示按下操作
//2 表示松开操作
//3 表示滑动/移动操作
if(action == TouchEvent.PRIMARY_POINT_DOWN){
//只要写按下时需要运行的代码即可
//text1.setText("按下" + count);
//获取按下时手指的位置(坐标)
/* MmiPoint point = touchEvent.getPointerPosition(0);
startX = point.getX();
startY = point.getY();*/
//text1.setText(x + "---" + y);
text1.setText("按下");
}else if(action == TouchEvent.POINT_MOVE){
//移动/滑动
//text1.setText("移动"+ count);
/* MmiPoint point = touchEvent.getPointerPosition(0);
float x = point.getX();
float y = point.getY();
text1.setText(x + "---" + y);*/
text1.setText("移动");
}else if(action == TouchEvent.PRIMARY_POINT_UP){
text1.setText("松开");
//松开手指
//text1.setText("松开"+ count);
/* MmiPoint point = touchEvent.getPointerPosition(0);
float endX = point.getX();
float endY = point.getY();
//text1.setText(x + "---" + y);
//拿着按下时手指的位置跟松开时手指的位置进行比较就可以
if(endX > startX && Math.abs(endY - startY) < 100 ){
text1.setText("右滑");
}else if(endX < startX && Math.abs(endY - startY) < 100){
text1.setText("左滑");
}else if(endY > startY && Math.abs(endX - startX) < 100){
text1.setText("下滑");
}else if(endY < startY && Math.abs(endX - startX) < 100){
text1.setText("上滑");
}*/
}
//如果为true,表示所有的动作都会触发当前方法并执行对应代码。
//如果为false,表示只有第一个动作会触发当前方法并执行对应代码。
//后续的动作就不会触发当前方法了。
//按下 --- 移动 --- 松开
return true;
}
}

双击事件

DoubleClickedListener 双击按钮修改文本内容

public class MainAbilitySlice extends AbilitySlice implements Component.DoubleClickedListener {
Text text1 = null;
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main);
//1.找到文本框组件和按钮组件
Button but1 = (Button) findComponentById(ResourceTable.Id_but1);
text1 = (Text) findComponentById(ResourceTable.Id_text1);
//2.绑定事件
//我想要点谁,那么就给谁绑定事件
//当我双击了but1这个按钮之后,就会执行本类中的onDoubleClick这个方法
but1.setDoubleClickedListener(this);
}
@Override
public void onActive() {
super.onActive();
}
@Override
public void onForeground(Intent intent) {
super.onForeground(intent);
}
@Override
public void onDoubleClick(Component component) {
//Component表示点击组件的对象
//简单理解,我点了谁,那么Component就表示谁的对象
//目前而言,按钮对象对我们暂时还没有什么用处
//我们要做的是点击之后改变文本框中的内容。
text1.setText("双击");
}
}

长按事件

LongClickedListener长按按钮修改文本内容

public class MainAbilitySlice extends AbilitySlice implements Component.LongClickedListener {
Text text1 = null;
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main);
//1.找到本文框组件和按钮组件
Button btu1 = (Button) findComponentById(ResourceTable.Id_but1);
text1 = (Text) findComponentById(ResourceTable.Id_text1);
//2.绑定长按事件
btu1.setLongClickedListener(this);
}
@Override
public void onActive() {
super.onActive();
}
@Override
public void onForeground(Intent intent) {
super.onForeground(intent);
}
@Override
public void onLongClicked(Component component) {
//修改文本框里面的内容
text1.setText("长按");
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清辞-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值