Jetpack:023-Jetpack中的事件二

news2024/11/15 15:28:47

文章目录

  • 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中事件相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java数据结构重点知识】第一节:认识数据结构与算法、集合框架

一:数据结构与算法 1.数据结构 数据结构是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合 2.算法 算法就是定义良好的计算过程。他取一个或一组的值为输入,并产生一个或一组作为输出。简单来说就是一系列的…

Linux】centos安装配置及远程连接工具的使用

【Linux】centos安装配置及远程连接工具的使用 1.使用vmware创建虚拟机,因为过程比较简单就没有截图了,根据下面步骤来就行。2.网络配置3.MobaXterm连接CentOS1.new session2.点击ssh,输入虚拟机的IP地址即可 4.进行阿里云换源1.进入2.下载wg…

AMD:抢占AI芯片宝座

来源:猛兽财经 作者:猛兽财经 总结: (1)AMD受益于AI芯片的出口限制,使其能够获得更多的中国市场份额,并增强其在AI芯片市场的地位。 (2)AMD的处理器,特别是E…

ctfshow-web入门命令执行29-36

29 源代码给了禁用flag 使用tac、nl ?cecho nl f*; ?cecho tac f*; 30 多禁用了system和php 和上题区别不大,使用上一题命令就能解 ?cecho nl f*; ?cecho tac f*; 31 禁用了空格使用%09代替 ?cecho%09tac%09f*; 32 禁用了echo 使用php伪协议 ?cinclud…

从零开始学习搭建量化平台笔记

从零开始学习搭建量化平台笔记 本笔记由纯新手小白开发学习记录,欢迎大佬请教指点留言,有空的话还可以认识一下,来上海请您喝咖啡~~ 2023/10/30:上份工作辞职并休息了几个月后,打算开始找个关于量化投资相关的工作。面…

云原生之使用Docker部署slash书签共享平台

云原生之使用Docker部署slash书签共享平台 一、slash介绍1.1 slash简介1.2 slash特点 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四、下载slash镜像五、部署slash书签共享平台5…

2模块和包的一些总结:导入库和模块

感觉这块好零散呀,应该怎么去写呢?截图吧 1、导入多个模块的方法 #导入多个包有几种办法 # 1.用点号 # 2.用逗号import p1.Tool import p1.sub_p.sub_xxxprint(p1.Tool.num) print(p1.sub_p.sub_xxx.num)import p1.Tool,p1.sub_p.sub_xxx print(p1.Tool…

基于纵横交叉算法的无人机航迹规划-附代码

基于纵横交叉算法的无人机航迹规划 文章目录 基于纵横交叉算法的无人机航迹规划1.纵横交叉搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用纵横交叉算法来优化无人机航迹规划。 …

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

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

【MySQL索引与优化篇】数据库优化及性能分析工具使用

数据库优化及性能分析工具使用 文章目录 数据库优化及性能分析工具使用1. 数据库服务器优化的步骤2. 查询系统性能参数3. 定位执行满的SQL:慢查询日志4. 查看SQL执行成本:show profile5. 分析查询工具:explain5.1 id5.2 type 6. explain进一步…

【AI视野·今日Sound 声学论文速览 第三十一期】Mon, 23 Oct 2023

AI视野今日CS.Sound 声学论文速览 Mon, 23 Oct 2023 Totally 9 papers 👉上期速览✈更多精彩请移步主页 Daily Sound Papers Two-Stage Triplet Loss Training with Curriculum Augmentation for Audio-Visual Retrieval Authors Donghuo Zeng, Kazushi Ikeda跨模态…

dp三步问题

三步问题 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 class Solution { public:int waysToStep(int n) {vector<int> dp(n1,1);if(n1) return 1;dp[1]1;dp[2]2;for(int i3; i<n1; i){dp[i] ((dp[i-1]dp[i-2])%1000000007dp[i-3])%100…

类变量/方法、main语法、代码块

一.类变量和方法 思维导图概览&#xff1a; 1.1类变量&#xff08;静态变量&#xff09; 1.什么叫做类变量/方法&#xff1f; ——给类中的成员属性或成员方法加上static关键字进行修饰&#xff0c;类变量/方法也叫做静态变量/方法&#xff0c;静态变量/方法被类的自身所有对…

C/C++ 飞翔的小鸟

载入问题&#xff1a; 解决之后效果&#xff1a; 放在main函数里面进行封装&#xff1a; 效果展示: 实现下坠 放进while&#xff08;1&#xff09;里面不断进入循环&#xff0c;每次进入循环&#xff0c;鸟的y坐标值就会发生变化&#xff0c;以此实现下下坠效果 效果展示&#…

取消Excel打开密码的两种方法

Excel设置了打开密码&#xff0c;想要取消打开密码是由两种方法的&#xff0c;今天分享这两种方法给大家。 想要取消密码是需要直到正确密码的&#xff0c;因为只有打开文件才能进行取消密码的操作 方法一&#xff1a; 是大家常见的取消方法&#xff0c;打开excel文件之后&a…

【python入门篇——7】循环控制(if、while、for、range)

目录 一、条件和 If 语句 1.Python 支持来自数学的常用逻辑条件 2.缩进 3.Elif 4.Else 5.pass语句 二、While 循环 1.else 语句 三、for 循环 1.循环遍历字符串 2.Else 3.嵌套循环 4.pass 语句 四、range() 函数 1.range() 函数 2.起始参数 3.递增序列 一、条…

Elasticsearch-8.10.4安装

1.官网下载 https://www.elastic.co/cn/downloads/elasticsearch#ga-release 下载的是Linux x86_64 包名为elasticsearch-8.10.4-linux-x86_64.tar.gz 2.服务器解压 tar -xvf elasticsearch-8.10.4-linux-x86_64.tar.gz 3.修改配置 编辑配置文件config/elasticsearch.y…

ChineseChess.2023.10.30.01

中国象棋模拟器&#xff1a;黑子一步即杀的棋&#xff0c;红要解棋&#xff0c;不断将军慢慢把老帅边上棋子走开才有可能离开底线 【可以不上“士”的&#xff0c;将上去完事。】 不上【士】就没了&#xff0c;这局不知道咋破&#xff0c;哈哈 修改缺陷吧 中国象棋残局模拟器C…

0-1背包问题【穷举法+二维dp数组】

问题描述&#xff1a; 使用穷举法解决0/1背包问题。问题描述&#xff1a;给定n个重量为{w1, w2, … ,wn}、价值为{v1, v2, … ,vn} 的物品和一个容量为C的背包&#xff0c;求这些物品中的一个最有价值的子集&#xff0c;且要能够装到背包中。 穷举法&#xff1a;每件物品装还是…

网络协议--TCP的未来和性能

24.1 引言 TCP已经在从1200 b/s的拨号SLIP链路到以太数据链路上运行了许多年。在80年代和90年代初期&#xff0c;以太网是运行TCP/IP最主要的数据链路方式。虽然TCP在比以太网速率高的环境&#xff08;如T2电话线、FDDI及千兆比网络&#xff09;中也能够正确运行&#xff0c;但…