使用 Multi-Click Manipulator

使用 Multi-Click Manipulator 使用户能够在您的 Kanzi 应用程序中多次点击节点。

请参阅 为节点启用多击手势。

您可以使用以下方式响应多次点击手势:

Multi-Click Manipulator 是您可以用来在 Kanzi 应用程序中的节点添加手势识别的输入操控器之一。请参阅 使用输入操纵器。

要为节点启用点击手势,使用 Click Manipulator。请参阅 使用 Click Manipulator。

通过完成教程学习如何使用 Multi-Click Manipulator。请参阅 教程:平移、缩放、轻触。

../../_images/multi-click-manipulator.gif

为节点启用多击手势

本节介绍了如何为任意节点启用多击手势。

Text Box 节点默认情况下支持双击手势。当您在 Text Box 节点中双击一个单词时,Kanzi 会选择该单词。

要为 Button 节点启用双击,请参阅 为 Button 节点启用双击手势。

要为 List Box 项目启用双击功能,请参阅 为 List Box 项目启用双击手势。

要为节点启用多击手势:

  1. 在 Node Tree 中创建一个您想启用多击手势的节点。

    例如,创建一个 Empty Node 2D 节点,将其命名为 MultiClickNode,并向该节点添加内容。

    ../../_images/multiclicknode-in-project.png
  2. 在 Node Tree 中选择您在上一步中创建的节点,在 Properties 中添加 Input > Hit Testable 属性,并将其设置为启用。

    当您启用属性时,用户能选取节点。

    默认情况下,Button、Toggle Button、List Box Item Container、Scroll View、Slider 和 Text Box 节点启用了命中测试。

    请参阅 定义哪个节点接收输入。

    ../../_images/multiclicknode-properties.png
  3. 在 Node Components 按 Alt 并右键单击 Input Manipulators 中,选择 Multi-Click Manipulator。

    通过这种方式,您可以使 MultiClickNode 节点对多击手势做出反应。通过将 Multi-Click Manipulator 组件添加到节点,您可以在该节点上安装 MultiClickManipulator。

    要控制 MultiClickManipulator 的行为,您可以在 Multi-Click Manipulator 组件中添加并设置这些属性:

    • Click Count 设置 MultiClickManipulator 识别多次点击手势所需的点击次数。

    • Multi-Click Timeout 设置两个连续点击必须发生的时间(以毫秒为单位),以便 MultiClickManipulator 将其识别为多次点击手势的一部分。默认情况下,如果两次点击在 250 毫秒内发生,Kanzi 会将其识别为双击手势。

    • Send Intermediate Click Messages 设置是否在多次点击手势期间发生的每次点击时触发 Intermediate Click。

      当用户在多次点击手势期间在节点区域点击且未达到所需点击次数时,Intermediate Click 触发器被激活。

    ../../_images/add-multi-click-manipulator.png ../../_images/multi-click-manipulator-properties.png
  4. 使用 Multi-Click Manipulator 触发器来响应多次点击手势。例如,您可以在用户连续多次点击某个节点时更改该节点的外观。

    请参阅 使用 Multi-Click Manipulator 触发器。

使用 Multi-Click Manipulator 触发器

使用 Multi-Click Manipulator 触发器来响应多次点击手势。例如,您可以在用户连续多次点击某个节点时更改该节点的外观。

Multi-Click Manipulator 具有以下触发器:

  • 当用户在节点区域多次点击时,Multi-Click 触发器被激活。

  • 当焦点在多次点击手势期间移开节点时,Multi-Click Canceled 触发器被激活。

  • 当用户在多次点击手势期间在节点区域点击且未达到所需点击次数时,Intermediate Click 触发器被激活。

要使用 Multi-Click Manipulator 触发器:

  1. 为节点启用多次点击手势。请参阅 为节点启用多击手势。

  2. 定义您想通过 Multi-Click Manipulator 触发器设置的行为。

    例如,创建状态机,您可以定义状态以设置节点在 Multi-Click 和 Multi-Click Canceled 触发器被触发时的外观。请参阅 创建状态机。

  3. 添加和配置 Multi-Click Manipulator 触发器:

    1. 在 Node Tree 中选择您要添加触发器的节点,然后在 Node Components > Triggers 中添加一个 Multi-Click Manipulator 触发器。

      例如:在 Node Tree 中,选择您启用了多击手势的节点,在 Node Components 按 Alt 并右键单击 Triggers 中,选择 Message Trigger > Multi-Click > Multi-Click。

      ../../_images/multiclicknode-in-project.png ../../_images/add-multi-click-trigger.png
    2. 在您上一步创建的触发器中,禁用 Set Message Handled 属性。

      当您禁用 Set Message Handled 属性时,此触发器会拦截消息,但不会停止它。这样,您可以让输入操控器处理该消息。

      ../../_images/multi-click-trigger-settings.png
    3. 在 Node Components 按 Alt 并右键单击 中,选择您创建的触发器,选择一个操作,并进行配置。

      例如,选择 Dispatch Message Action > State Manager > Next State,并在操作集中:

      • Target Item 到使用您创建的状态管理器来设置节点外观的节点,当 Multi-Click 触发器被重复触发时。

      • 将 State Group 到包含您要在 Multi-Click 触发器被触发时切换的状态的状态组中。

      ../../_images/multi-click-add-next-state-action.png ../../_images/next-state-action-for-multi-click.png

使用 Kanzi Engine API 对多次点击手势作出反应。

您可以在应用程序代码中定义应用程序如何响应多次点击手势。

要使用 Kanzi Engine API 响应多次点击手势:

  1. 在 Kanzi Studio 中,使用 Application 模板创建一个项目。

    ../../_images/create-project-with-application.png
  2. 为节点启用多次点击手势。请参阅 为节点启用多击手势。

    当您在 Kanzi Studio 中为节点启用多击手势时,您会在该节点中创建一个 MultiClickManipulatorComponent,它会在节点上安装一个 MultiClickManipulator。

  3. 在 Node Tree 按 Alt 并右键单击 中,创建的节点并选择 Alias。

    Kanzi Studio 创建一个指向您创建别名的节点的别名,并将其添加到其最近的包含资源字典的祖先节点的资源字典中。

    使用 # 符号后跟别名名称访问别名目标节点。

    ../../_images/multiclicknode-create-alias.png ../../_images/multiclicknode-in-dictionaries.png
  4. 选择 File > Export > Export KZB。

    Kanzi Studio creates the kzb file and configuration files from your Kanzi Studio project. Kanzi Studio stores the exported files in the <ProjectName>/Application/bin directory or the location that you set in Project > Properties in the Binary Export Directory property. The kzb file contains all nodes and resources from your Kanzi Studio project, except the resources that you mark in a localization table as locale packs.

    当您从 Visual Studio 运行您的 Kanzi 应用程序时,您的应用程序会加载 kzb 文件和配置文件。

    ../../_images/export-kzb-binary.png
  5. 在 Kanzi Studio 中,选择 File > Open Kanzi Command Prompt。

    Kanzi Command Prompt 打开 Windows 命令提示符,并为您打开 Kanzi Command Prompt 的 Kanzi 版本设置 Kanzi 环境变量。

    使用 Kanzi Command Prompt 访问 Kanzi 实用工具和构建工具(例如 Gradle 和 CMake),而无需使用绝对路径或设置环境变量。

    ../../_images/open-kanzi-command-prompt.png

    小技巧

    您可以在 Windows 开始菜单的 Rightware 目录中找到 Kanzi Command Prompt。

    当您安装了多个版本的 Kanzi 时,确保将您要在该命令提示符下使用的 Kanzi 版本的 Kanzi Command Prompt 启动。

  6. 在 <ProjectName>/Application 目录中的 Kanzi Command Prompt 中,运行生成应用程序的 Visual Studio 解决方案的脚本。

    generate_cmake_vs2022_solution.bat
    

    此脚本会在 <ProjectName>/Application/build_vs2022 目录中为应用程序生成 Visual Studio 解决方案。

  7. 在 Visual Studio 中,打开 <ProjectName>/Application/build_vs<Version>/<ProjectName>.sln Visual Studio 解决方案,并在实现应用程序逻辑的文件中定义如何响应多次点击手势:

    1. 为多次点击消息定义处理程序。

      例如,在实现应用程序逻辑的类的 public 部分后添加:

      private:
          // Define the handler for the MultiClickManipulator::MultiClickMessage message from the
          // nodes that have an input manipulator which generates the multi-click message.
          void onNodeMultiClicked(MultiClickManipulator::MultiClickMessageArguments&)
          {
              // Add the code that handles the multi-click event.
          }
      
    2. 在 Application::onProjectLoaded 函数中订阅 MultiClickManipulator 消息。

      例如,添加:

      void onProjectLoaded() override
      {
          ScreenSharedPtr screen = getScreen();
      
          // Get the MultiClickNode node using its alias.
          NodeSharedPtr multiClickNode = screen->lookupNode<Node>("#MultiClickNode");
      
          // Subscribe to the MultiClickManipulator::MultiClickMessage message at the MultiClickNode node.
          // The MultiClickManipulator manipulator generates this message when the user multi-clicks the node.
          multiClickNode->addMessageHandler(MultiClickManipulator::MultiClickMessage, bind(&MyProject::onNodeMultiClicked, this, placeholders::_1));
      }
      
  8. 构建并运行您的应用程序。请参阅 部署 Kanzi 应用程序。

    在应用程序中,多次点击您为其启用了多次点击手势的节点。应用程序执行您在 MultiClickManipulator::MultiClickMessage 消息的处理程序中定义的行为。

另请参阅

教程:平移、缩放、轻触

处理用户输入

使用 Click Manipulator

使用 Long-Press Manipulator

部署 Kanzi 应用程序

使用触发器