Jetpack:023-Jetpack中的事件二

文章目录

  • 1. 知识回顾
  • 2. 使用方法
    • 2.1 单击事件
    • 2.2 双击事件
    • 2.3 长按事件
    • 2.4 滑动事件
  • 3. 示例代码
  • 4. 内容总结

我们在上一章回中介绍了 Jetpack中事件相关的内容,本章回中继续介绍这方面的内容。闲话休提,让我们一起Talk Android Jetpack吧!

1. 知识回顾

我们在上一章回中介绍了事件的概念,主要介绍的是高级事件,本章回中将介绍低级事件,与高级事件相比,低级事件的功能更别强大一些,比如可以获取到事件的坐标偏移值。

低级事件的分类和高级事件相同,也分为单击,双击,长按和滑动这几种。本章回中将介绍如何在程序中响应这些事件。

2. 使用方法

低级事件通过ModifierpointerInput修饰符来响应,该修饰符中包含detectTapGesturesdetectDragGestures两种参数,前者用来响应各种点击事件,后者用来响应滑动事件,接下来我们将依据事件的种类来介绍如何响应不同的事件。

2.1 单击事件

在compose中,单击事件通过detectTapGestures中的onPressonTap参数来响应,其中onPress先触发,onTap后触发,它们类似View事件中的Event_Down和Event_Up事件,分别表示单击事件中的落下与弹起。我们将在稍后的小节中通过具体的代码来演示它们的用法。

2.2 双击事件

在compose中,双击事件通过detectTapGestures中的onDoubleTap参数来响应,它的用法类似Button中的onClick参数,我们将在稍后的小节中通过具体的代码来演示它的用法。

2.3 长按事件

在compose中,长按事件通过detectTapGestures中的onLongPress参数来响应,它的用法类似Button中的onClick参数,我们将在稍后的小节中通过具体的代码来演示它的用法。
大家注意一下:上面介绍的这三种事件都使用了相同的修饰符:detectTapGestures,只是修饰符中的参数名称不同。

2.4 滑动事件

在compose中,滑动事件通过detectDragGestures修饰符来响应,该修饰中包含的参数如下:

suspend fun PointerInputScope.detectDragGestures(
    onDragStart: (Offset) -> Unit = { },
    onDragEnd: () -> Unit = { },
    onDragCancel: () -> Unit = { },
    onDrag: (change: PointerInputChange, dragAmount: Offset) -> Unit
)

大家从参数的名称就可以看出各个参数的作用来,我们重点介绍一下onDrag参数,它主要用来响应滑动事件,它包含两个参数,详细的功能如下:

  • change参数:主要用来计算滑动过程的各种数值;
  • dragAmount参数:主要用来获取滑动过程中的坐标偏移值;

关于滑动的理论内容先介绍这些,我们将在稍后的小节中通过具体的代码来演示它们的用法。

3. 示例代码

Column(
    modifier = Modifier
        .padding(paddingValue)
        .fillMaxSize(),
    verticalArrangement = Arrangement.spacedBy(24.dp),
    horizontalAlignment = Alignment.CenterHorizontally
) {

    //pointerInput修饰符用来检测tap和drag手势
    Text(modifier = Modifier.pointerInput(Unit) { detectTapGestures(
        //先运行onPress再运行onTap,onPress相当于View中的EventDown,onTap相当于Up
        //通过参数offset可以获取到偏移值
        onTap = { offset -> str = "onTap: $offset" },
        onDoubleTap = {str = "onDoubleTap"},
        onPress = {offset -> str = "onPress: $offset"},
        onLongPress = {str = "onLongPress"}
    ) },
        text = str)



    var offsetX by remember { mutableStateOf(0f) }
    var offsetY by remember { mutableStateOf(0f) }

    //响应复杂的拖动
    Box(modifier = Modifier
        .size(200.dp)
        .background(color = Color.Yellow)
    ) {
        Text(modifier = Modifier
            .offset { IntOffset(offsetX.roundToInt(), offsetY.roundToInt()) }
            .size(60.dp)
            .background(color = Color.Green)
            .pointerInput(Unit) {
                detectDragGestures { change, dragAmount ->
                    change.consume()
                    //change中包含的全是偏移值,原始坐标值如何查看
                    Log.d(TAG, "EventMainScreen: $change")
                    offsetX += dragAmount.x
                    offsetY += dragAmount.y
                }
            },
            text ="Drag"
        )
    }
}

我们在上面的示例代码中演示了单击,双击,长按和滑动这几种事件的响应方法,与上一章回中不同的是,代码中使用了不同的修饰符,我们把这些事件绑定到了Text上,当发出不同的事件时Text显示不同的事件名称,这点和上一章回中的运行效果相同,因此我们就不演示运行效果了。

在响应滑动事件时,我们修改了Text的位置,因此它不但会显示偏移的坐标值还会跟着滑动事件一起移动,这里的移动比上一章回中的移动范围广,上一章回中只限于水平移动,这里的移动是任意方向的移动。下面是程序的运行效果图,请大家参考:
在这里插入图片描述

4. 内容总结

最后,我们将对本章回的内容做全面的总结:

  • compose中的低级事件通过pointerInput修饰符来响应;
  • pointerInput包含两种不同的参数:detectTapGestures和detectDragGestures;
  • detectTapGestures主要用来响应单击,双击和长按事件;
  • detectDragGestures主要用来响应滑动事件;

看官们,与Jetpack中事件相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/109949.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

消息中间件——RabbitMQ(一)Windows/Linux环境搭建(完整版)

前言 最近在学习消息中间件——RabbitMQ,打算把这个学习过程记录下来。此章主要介绍环境搭建。此次主要是单机搭建(条件有限),包括在Windows、Linux环境下的搭建,以及RabbitMQ的监控平台搭建。 环境准备 在搭建Rabb…

matlab simulink 遗传算法优化RBF

1、内容简介 略 2-可以交流、咨询、答疑 2、内容说明 先用遗传算法优化RBF的权重系数,然后用RBF来做个控制器,查看效果 遗传算法、RBF控制、优化 3、仿真分析 4、参考论文 略

【AI视野·今日Robot 机器人论文速览 第六十期】Mon, 23 Oct 2023

AI视野今日CS.Robotics 机器人学论文速览 Mon, 23 Oct 2023 Totally 26 papers 👉上期速览✈更多精彩请移步主页 Daily Robotics Papers A Review of Prospects and Opportunities in Disassembly with Human-Robot Collaboration Authors Meng Lun Lee, Xiao Lian…

Kibana无法启动 kibana_task_manager search_phase_execution_exception 问题解决

今天服务器重启以后,发现无法启动Kibana服务了,在网上也是把错误搜索了半天,尝试了那些命令,但是执行删除命令时居然报错了。后来,仔细观察后,发现是删除方式不太正确,需要改一下删除命令才能正…

黑豹程序员-架构师学习路线图-百科:PowerDesigner数据库建模的行业标准

PowerDesigner最初由Xiao-Yun Wang(王晓昀)在SDP Technologies公司开发完成。 目前PowerDesigner是Sybase的企业建模和设计解决方案,采用模型驱动方法,将业务与IT结合起来,可帮助部署有效的企业体系架构,并…

【2023.10.30练习】C语言-循环右移字符

计算机能力挑战初赛2020.19题 题目描述: 现要对一个由字符a-z和A-Z组成的字符串进行解密,已知加密规则是: 字符串中所有字符分别在大写或小写的字母表中被循环左移5位(fGh-->aBc), 输入:一个加密过的字符串&#…

强化学习------DDQN算法

前言 DQN算法 DQN算法有一个显著的问题,就是DQN估计的Q值往往会偏大。这是由于我们Q值是以下一个s’的Q值的最大值来估算的,但下一个state的Q值也是一个估算值,也依赖它的下一个state的Q值…,这就导致了Q值往往会有偏大的的情况…

设计模式之备忘录模式

文章目录 一、介绍二、应用举例三、基本角色四、代码演示五、总结 一、介绍 备忘录模式(Memento Pattern),属于行为型设计模式。目的是用于保存一个对象在某一时刻的状态,以便于在将来某个时刻根据此状态恢复该对象。 在我们日常生活中,备忘…

【腾讯云 HAI域探秘】——锋体验官测试感受

腾讯云 HAR域探秘活动CSDN主页:腾讯云“HAI域探秘“新品先锋体验官招募,丰厚大奖限时领取!_CSDN资讯的博客-CSDN博客 前言 参加这次活动感受到自动的好处,有句话叫做前人种树后人乘凉,对于我这样的AI小白来说&#x…

Android多张图片rotation旋转角度叠加/重叠堆放

Android多张图片rotation旋转角度叠加/重叠堆放 <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto"…

Node学习笔记之MongoDB

一、简介 1.1 Mongodb 是什么 MongoDB 是一个基于分布式文件存储的数据库&#xff0c;官方地址 MongoDB: The Developer Data Platform | MongoDB 1.2 为什么选择 Mongodb 操作语法与 JavaScript 类似&#xff0c;容易上手&#xff0c;学习成本低 二、核心概念 Mongodb 中…

CAN总线通信协议

Reference video: 趋近于完美的通讯 CAN总线&#xff01;4分钟看懂&#xff01; CAN通信精华整理&#xff0c;汽车工程师必备技能&#xff0c;一个视频带你轻松掌握&#xff01; 写在前面&#xff1a;CAN通信就三个要点 - 波特率的配置 - 过滤寄存器的配置与理解&#xff08;…

Linux mv命令:移动文件或改名

mv 命令&#xff08;move 的缩写&#xff09;&#xff0c;既可以在不同的目录之间移动文件或目录&#xff0c;也可以对文件和目录进行重命名。该命令的基本格式如下&#xff1a; [rootlocalhost ~]# mv 【选项】 源文件 目标文件 -f&#xff1a;强制覆盖&#xff0c;如果目标文…

配置Super-VLAN下的DHCP服务器示例

组网需求 如图1所示&#xff0c;某公司拥有两个部门&#xff0c;为了节省IP地址&#xff0c;部门A和部门B规划为同一网段&#xff1b;为了提升业务安全性&#xff0c;将不同部门的用户划分到不同VLAN中。企业管理员为了方便统一管理&#xff0c;希望部门内终端通过DHCP服务器动…

Java精品项目源码爱心捐赠平台网站(编号V65)

Java精品项目源码扶农助农平台建设系统(编号V64) 大家好&#xff0c;小辰今天给大家介绍一个爱心捐赠平台网站(编号V65)&#xff0c;演示视频公众号&#xff08;小辰哥的Java&#xff09;对号查询观看即可 文章目录 Java精品项目源码扶农助农平台建设系统(编号V64)难度指数&a…

Failed to prepare the device for development

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的编码爱好者 大家好&#xff0c;我是 DevO…

chat gpt 在开发当中的应用

chatgpt 出来已经有一段时间了&#xff0c;本人在开发的过程中也是有去使用。 经常使用的是讯飞大模型和通义千问&#xff0c;在使用的过程中&#xff0c;个人感觉讯飞大模型在写代码方面会比较智能。 比如问一个 sqlser 单表 数据量 几个亿如何处理的问题&#xff0c;讯飞会给…

Hive On Spark 概述、安装配置、计算引擎更换、应用、异常解决

文章目录 Hadoop 安装Hive 安装Hive On Spark 与 Spark On Hive 区别Hive On SparkSpark On Hive 部署 Hive On Spark查询 Hive 对应的 Spark 版本号下载 Spark解压 Spark配置环境变量指定 Hadoop 路径在 Hive 配置 Spark 参数上传 Jar 包并更换引擎 测试 Hive On Spark解决依赖…

Python多重继承

Python多重继承 1、Python多重继承2、Python多重继承的顺序 1、Python多重继承 继承是面向对象编程的一大特征&#xff0c;继承可以使得子类具有父类的属性和方法&#xff0c;并可对属性和方法进行扩展。Python中继承的最大特点是支持多重继承&#xff0c;也即一个类可以同时继…

OpenCV学习(二)——OpenCV中绘图功能

2. OpenCV中绘图功能2.1 画线2.2 画矩形2.3 画圆2.4 画多边形2.5 添加文本 2. OpenCV中绘图功能 绘图可以实现画线、画矩形、画圆、画多边形和添加文本等操作。 import cv2 import numpy as np# 读取图像 img cv2.imread(lena.jpg)# 画直线 cv2.line(img, (0, 0), (512, 512…