• Harmony2.0开发—事件



    常见的事件有:单击、双击、长按、还有触摸事件 。
    我们可以给文本、按钮等等组件添加不同的事件。


    更多详情可前往鄙人博客网站获取:https://roydon.xyz/
    (不建议CSDN直接打开)


    单击事件

    • 接口名:ClickedListener

    四种实现方法(下面的其他事件类推):

    1. 自己编写实现类
    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);
        }
    }
    
    1. 实现 Component.ClickedListener 接口
    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);}
    
    }
    
    1. 方法引用
    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);
        }
    }
    
    1. 匿名内部类
    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);
        }
    }
    

    双击事件

    • 接口名:DoubleClickedListener
    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);
        }
    }
    

    长按事件

    • 接口名:LongClickedListener
    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);
        }
    }
    

    滑动事件(触摸事件)

    • 接口名:TouchEventListener

    滑动事件里面分为三个动作:按下不松,移动,抬起。

    • PRIMARY_POINT_DOWN:按下不松。
    • POINT_MOVE:移动。
    • PRIMARY_POINT_UP:抬起。

    手机坐标: 手机左上角的点为原点。 (向右为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);
        }
    }
    

  • 相关阅读:
    PHP跨站点对接访问请求
    Nautilus Chain 联合香港数码港举办 BIG DEMO DAY活动,释放何信号?
    6.SSM-SpringBoot
    腾讯云代金券怎么领取(腾讯云代金券在哪领取)
    Vue 常用指令
    【计算机网络】数据链路层
    bp神经网络反向传播原理,BP神经网络反向传播
    R语言使用plot函数可视化数据散点图,通过axis函数添加X轴坐标轴(add x axis)
    猜你需要的第三方免费API大全分享
    【生成模型】Diffusion Models:概率扩散模型
  • 原文地址:https://blog.csdn.net/m0_51390535/article/details/127042738