常见的事件有:单击、双击、长按、还有触摸事件 。
我们可以给文本、按钮等等组件添加不同的事件。
更多详情可前往鄙人博客网站获取:https://roydon.xyz/
(不建议CSDN直接打开)
四种实现方法(下面的其他事件类推):
public class MainAbilitySlice extends AbilitySlice {
Button btn1;
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main);
btn1 = (Button) findComponentById(ResourceTable.Id_btn1);
// 1.自定义实现类
btn1.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) {
Button btn1 = (Button) component;
btn1.setText("被点了");
btn1.setClickable(false);
}
}
public class MainAbilitySlice extends AbilitySlice implements Component.ClickedListener {
Button btn1;
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main);
btn1 = (Button) findComponentById(ResourceTable.Id_btn1);
// 2.实现接口
btn1.setClickedListener(this);
}
// 重写点击方法
@Override
public void onClick(Component component) {
btn1.setText("被点了");
}
@Override
public void onActive() {super.onActive();}
@Override
public void onForeground(Intent intent) {super.onForeground(intent);}
}
public class MainAbilitySlice extends AbilitySlice implements Component.ClickedListener {
Button btn1;
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main);
btn1 = (Button) findComponentById(ResourceTable.Id_btn1);
// 3.方法引用
btn1.setClickedListener(this::onClick);
}
@Override
public void onClick(Component component) {
btn1.setText("被点了");
}
@Override
public void onActive() {
super.onActive();
}
@Override
public void onForeground(Intent intent) {
super.onForeground(intent);
}
}
public class MainAbilitySlice extends AbilitySlice{
Button btn1;
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main);
btn1 = (Button) findComponentById(ResourceTable.Id_btn1);
// 4.匿名内部类
btn1.setClickedListener(new Component.ClickedListener() {
@Override
public void onClick(Component component) {
btn1.setText("被点了");
}
});
}
@Override
public void onActive() {
super.onActive();
}
@Override
public void onForeground(Intent intent) {
super.onForeground(intent);
}
}
public class MainAbilitySlice extends AbilitySlice{
Button btn1;
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main);
btn1 = (Button) findComponentById(ResourceTable.Id_btn1);
// 绑定双击事件
btn1.setDoubleClickedListener(new Component.DoubleClickedListener() {
@Override
public void onDoubleClick(Component component) {
btn1.setText("被双击了");
}
});
}
@Override
public void onActive() {
super.onActive();
}
@Override
public void onForeground(Intent intent) {
super.onForeground(intent);
}
}
public class MainAbilitySlice extends AbilitySlice{
Button btn1;
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main);
btn1 = (Button) findComponentById(ResourceTable.Id_btn1);
// 绑定长按事件
btn1.setLongClickedListener(new Component.LongClickedListener() {
@Override
public void onLongClicked(Component component) {
btn1.setText("被长按了");
}
});
}
@Override
public void onActive() {
super.onActive();
}
@Override
public void onForeground(Intent intent) {
super.onForeground(intent);
}
}
滑动事件里面分为三个动作:按下不松,移动,抬起。
手机坐标: 手机左上角的点为原点。 (向右为X轴 | 向下为Y轴 | 垂直于屏幕向上为Z轴)
import com.roydon.beautifyapp1.MainAbility;
import com.roydon.beautifyapp1.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.window.dialog.ToastDialog;
import ohos.multimodalinput.event.MmiPoint;
import ohos.multimodalinput.event.TouchEvent;
public class MainAbilitySlice extends AbilitySlice{
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main);
DirectionalLayout dl = (DirectionalLayout) findComponentById(ResourceTable.Id_dl);
dl.setTouchEventListener(new Component.TouchEventListener() {
@Override
public boolean onTouchEvent(Component component, TouchEvent touchEvent) {
if (touchEvent.getAction()==TouchEvent.PRIMARY_POINT_DOWN){
System.out.println("按下");
//因为给布局 DirectionalLayout 绑定的触摸事件,所以可以获取手指在屏幕按下的位置
System.out.println("手指按下的坐标:"+touchEvent.getPointerPosition(0));
MmiPoint position = touchEvent.getPointerPosition(0);
float pointX = position.getX();//按下点的横坐标
float pointY = position.getY();//按下点的纵坐标
}else if(touchEvent.getAction()==TouchEvent.POINT_MOVE){
System.out.println("移动");
//移动时间同样有坐标方法,坐标随手指移动不断变化
}else if(touchEvent.getAction()==TouchEvent.PRIMARY_POINT_UP){
System.out.println("松开");
}
return true;//若返回true继续事件,false反之
}
});
}
@Override
public void onActive() {
super.onActive();
}
@Override
public void onForeground(Intent intent) {
super.onForeground(intent);
}
}