• HarmonyOS/OpenHarmony(Stage模型)应用开发单一手势(三)


    五、旋转手势(RotationGesture)

    1. RotationGesture(value?:{fingers?:number; angle?:number})

    旋转手势用于触发旋转手势事件,触发旋转手势的最少手指数量为2指,最大为5指,最小改变度数为1度,拥有两个可选参数:

    fingers:非必选参数,用于声明触发旋转手势所需要的最少手指数量,最小值为2,最大值为5,默认值为2。

    angle:非必选参数,用于声明触发旋转手势的最小改变度数,单位为deg,默认值为1。

    以在Text组件上绑定旋转手势实现组件的旋转为例,可以通过在旋转手势的回调函数中获取旋转角度,从而实现组件的旋转:

    1. // xxx.ets
    2. @Entry
    3. @Component
    4. struct Index {
    5. @State angle: number = 0;
    6. @State rotateValue: number = 0;
    7. build() {
    8. Column() {
    9. Text('RotationGesture angle:' + this.angle).fontSize(28)
    10. // 在组件上绑定旋转布局,可以通过修改旋转角度来实现组件的旋转
    11. .rotate({ angle: this.angle })
    12. .gesture(
    13. RotationGesture()
    14. .onActionStart((event: GestureEvent) => {
    15. console.info('RotationGesture is onActionStart');
    16. })
    17. // 当旋转手势生效时,通过旋转手势的回调函数获取旋转角度,从而修改组件的旋转角度
    18. .onActionUpdate((event: GestureEvent) => {
    19. this.angle = this.rotateValue + event.angle;
    20. console.info('RotationGesture is onActionEnd');
    21. })
    22. // 当旋转结束抬手时,固定组件在旋转结束时的角度
    23. .onActionEnd(() => {
    24. this.rotateValue = this.angle;
    25. console.info('RotationGesture is onActionEnd');
    26. })
    27. .onActionCancel(() => {
    28. console.info('RotationGesture is onActionCancel');
    29. })
    30. )
    31. }
    32. .height(200)
    33. .width(250)
    34. }
    35. }

    六、滑动手势(SwipeGesture)

    1. SwipeGesture(value?:{fingers?:number; direction?:SwipeDirection; speed?:number})

    滑动手势用于触发滑动事件,当滑动速度大于100vp/s时可以识别成功,拥有三个可选参数:

    fingers:非必选参数,用于声明触发滑动手势所需要的最少手指数量,最小值为1,最大值为10,默认值为1。

    direction:非必选参数,用于声明触发滑动手势的方向,此枚举值支持逻辑与(&)和逻辑或(|)运算。默认值为SwipeDirection.All。

    speed:非必选参数,用于声明触发滑动的最小滑动识别速度,单位为vp/s,默认值为100。

    以在Column组件上绑定滑动手势实现组件的旋转为例:

    1. // xxx.ets
    2. @Entry
    3. @Component
    4. struct Index {
    5. @State rotateAngle: number = 0;
    6. @State speed: number = 1;
    7. build() {
    8. Column() {
    9. Column() {
    10. Text("SwipeGesture speed\n" + this.speed)
    11. Text("SwipeGesture angle\n" + this.rotateAngle)
    12. }
    13. .border({ width: 3 })
    14. .width(300)
    15. .height(200)
    16. .margin(100)
    17. //Column组件上绑定旋转,通过滑动手势的滑动速度和角度修改旋转的角度
    18. .rotate({ angle: this.rotateAngle })
    19. .gesture(
    20. // 绑定滑动手势且限制仅在竖直方向滑动时触发
    21. SwipeGesture({ direction: SwipeDirection.Vertical })
    22. // 当滑动手势触发时,获取滑动的速度和角度,实现对组件的布局参数的修改
    23. .onAction((event: GestureEvent) => {
    24. this.speed = event.speed;
    25. this.rotateAngle = event.angle;
    26. })
    27. )
    28. }
    29. }
    30. }

     

    说明当SwipeGesture和PanGesture同时绑定时,若二者是以默认方式或者互斥方式进行绑定时,会发生竞争。SwipeGesture的触发条件为滑动速度达到100vp/s,PanGesture的触发条件为滑动距离达到5vp,先达到触发条件的手势触发。可以通过修改SwipeGesture和PanGesture的参数以达到不同的效果。 

  • 相关阅读:
    go开发脚手架 动态/静态路由 (根据gin框架)
    功能测试常用的测试用例大全
    GLOG 日志宏分析与PR合并
    [模电课程设计]基于TCP7107的数字式温度计设计
    轧钢切头飞剪机设计及有限元分析
    多线程的概念(多线程的代码实现)
    oracle函数使用
    大数据_数据中台建设的成熟度评估模型
    提高尼日利亚稻米产量 丰收节贸促会:国稻种芯百团计划行动
    腾讯机器人实验室一号员工创业,人形机器人又添重磅玩家
  • 原文地址:https://blog.csdn.net/weixin_69135651/article/details/132714391