鸿蒙HarmonyOS APP 开发入门2--事件

系列文章目录

鸿蒙HarmonyOS APP 开发入门2–事件


文章目录

  • 系列文章目录
      • 三、事件学习
        • 1.单击事件(常用)
        • 2.事件的四种写法
        • 3.双击事件
        • 4.长按事件
        • 5. 滑动事件
      • 总结


三、事件学习


​ 设计APP的时候最重要的知识就是事件,APP的组件之间的交互等,都需要通过事件来进行实现。

​ 事件就是可以被识别的操作 。

​ 常见的事件有:单击、双击、长按、还有触摸事件。我们可以给文本、按钮等添加不同的事件。比如添加了单击事件之后,当我们再次点击文本、按钮,就可以运行对

应的代码了。

为了更好的学习事件,我们需要了解3个概念:事件,组件,布局。

  1. 屏幕展示出来的元素,都称之为组件

​ 比如:第一个HelloWorld案例中,我们是在界面最中央,写了一个Text文本框组件,文本框中的内容为HelloWorld。比如:第二个跳转案例中,我们是在界面最中央,写了一个Text文本框组件,然后再下面再写了一个Button按钮组件。所以,这里在界面中展示出来了文本,按钮都是组件中的一种,而鸿蒙中除了这两种之外,还提供了很多其他组件。

  1. 多个组件的摆放方式就是布局。而组件必须添加到布局中才能显示出来

​ 所以,当一个界面弹出之后,首先是一个布局,布局中有一个或者多个组件。比如说,文本组件,按钮组件等。外层的布局就决定了里面的这些组件如何进行摆放。比如:在第二个跳转案例中,最外层就是线性布局DirectionalLayout,这种布局方式默认将里面所有的组件从上往下依次摆放。而鸿蒙中,除了这种布局之外,还提供了很多其他的布局。

  1. 事件就是可以被组件识别的操作

​ 有了事件之后,组件就可以跟用户进行交互了。比如:第二个跳转案例中,我们点击了按钮一下,就跳转到第二个界面。这就是单击事件。在鸿蒙中除了单击事件之外,还有很多其他事件。

1.单击事件(常用)

​ 接口名:ClickedListener

2.事件的四种写法

​ 1)自己编写实现类

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);
        }
    public void onClick(Component component) {
        Button btu = (Button) component;
        btu.setText("被点了-单击事件的第一种写法");
        text1.setText("被点击了");
        }
    }
    class MyListener implements Component.ClickedListener{
    @Override
    public void onClick(Component component) {
        
        //component:所有组件的父类
          //参数:被点击的组件对象
        //component.setText();
        
        Button btu = (Button) component;
        
        btu.setText("被点了");
    }
}

​ 2)当前类实现接口

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("被点击了");
    }
}

​ 3)匿名内部类

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);
        }
}

​ 4)方法引用

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("被点击了");
    }
}

3.双击事件


接口名:DoubleClickedListener

案例:双击按钮修改文本内

public class MainAbilitySlice extends AbilitySlice implements Component.DoubleClickedListener {

    Text cyy_text;

    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_main);

        //通过id找到组件



        cyy_text = (Text) findComponentById(ResourceTable.Id_cyy_text);
        Button cyy_button = findComponentById(ResourceTable.Id_cyy_button);


        //绑定事件

        cyy_button.setDoubleClickedListener(this);
    }

    @Override
    public void onActive() {
        super.onActive();
    }

    @Override
    public void onForeground(Intent intent) {
        super.onForeground(intent);
    }

    @Override
    public void onDoubleClick(Component component) {

        //双击事件

        cyy_text.setText("lms");
        cyy_text.setTextColor(Color.RED);

    }
}

4.长按事件

​ 接口名:LongClickedListener

​ 案例:长按按钮修改文本内容

public class MainAbilitySlice extends AbilitySlice implements Component.LongClickedListener {
    Text cyy_text;
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_main);


        //通过id找到组件


        cyy_text = (Text) findComponentById(ResourceTable.Id_cyy_text);

        Button cyy_button = (Button) findComponentById(ResourceTable.Id_cyy_button);

        //绑定事件

        cyy_button.setLongClickedListener(this);
    }

    @Override
    public void onActive() {
        super.onActive();
    }

    @Override
    public void onForeground(Intent intent) {
        super.onForeground(intent);
    }

    @Override
    public void onLongClicked(Component component) {

        //长按事件
        
        cyy_text.setText("lms");
        cyy_text.setTextColor(Color.RED);

    }
}

5. 滑动事件

接口名:TouchEventListener

包括三个动作对象:按下,移动,抬起

  • PRIMARY_POINT_DOWN:按下
  • POINT_MOVE:移动
  • PRIMARY_POINT_UP:抬起

手机坐标

  • 手机左上角的点为原点
  • 向右为X轴
  • 向下为Y轴
  • 垂直于屏幕向上为Z轴

方法返回值

  • ​ true表示继续执行后面的动作
  • false表示不会继续执行后面的动作
public class MainAbilitySlice extends AbilitySlice implements Component.TouchEventListener {


    Text cyy_Text = null;
    int count = 0;


    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_main);

        //先找到整个的布局对象

        DirectionalLayout cyy_directional_layout = (DirectionalLayout) findComponentById(ResourceTable.Id_cyy_dl);


        cyy_Text = (Text) findComponentById(ResourceTable.Id_cyy_text);

        //给整个布局添加滑动事件

        cyy_directional_layout.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) {

        /*参数1:component表示滑动的那个组件(布局也是一种组件)
        * 参数2:touchEvent表示动作对象(按下,滑动,抬起)
        *
        *
        * */
        
        count++;
        
        int action = touchEvent.getAction();

        /* 1 表示按下操作
        * 2 表示抬起操作
        * 3 表示滑动操作
        * */




        if (action==TouchEvent.PRIMARY_POINT_DOWN){
            //按下
            //cyy_Text.setText("按下"+count);

            MmiPoint cyy_point = touchEvent.getPointerPosition(0);

            startX = cyy_point.getX();
            startY = cyy_point.getY();


        }else if(action==TouchEvent.POINT_MOVE){
            //滑动
            //cyy_Text.setText("滑动"+count);
        }else if(action==TouchEvent.PRIMARY_POINT_UP){
            //抬起
            //cyy_Text.setText("抬起"+count);
            MmiPoint cyy_point = touchEvent.getPointerPosition(0);

            float endX=cyy_point.getX();
            float endY=cyy_point.getY();

            if(endX < startX && Math.abs(endY-startY)<=150){

                cyy_Text.setText("左滑");

            }else if(endX > startX && Math.abs(endY-startY)<=150){
                cyy_Text.setText("右滑");
            }else if(endY < startY && Math.abs(endX-startX)<=150){
                cyy_Text.setText("上滑");
            }else if (endY > startY && Math.abs(endX-startX)<=150){
                cyy_Text.setText("下滑");
            }
        }
        return true;
    }
}

总结

我们要适应时代趋势,学习新技术

如果还有不懂得可以看上一篇文章HarmonyOS APP开发1

你可能感兴趣的:(HarmonyOS开发,鸿蒙,harmonyos,java,intellij-idea,鸿蒙系统)