手势学习

news2025/2/25 2:24:05

1. 点击手势

@Composable
fun ClickableSample() {

    val number = remember {
        mutableStateOf(0)
    }

    Text(
        text = number.value.toString(),
        textAlign = TextAlign.Center,
        modifier = Modifier
            .wrapContentSize()
            .clickable {
                number.value++
            }
            .background(Color.LightGray)
            .padding(horizontal = 50.dp, vertical = 40.dp)
    )

}
@Composable
fun ClickableSample() {

    val number = remember {
        mutableStateOf(0)
    }

    Text(
        text = number.value.toString(),
        textAlign = TextAlign.Center,
        modifier = Modifier
            .wrapContentSize()
//            .clickable {
//                number.value++
//            }
            .pointerInput(Unit){
                detectTapGestures(
                    onPress = { number.value =1 },//按
                    onDoubleTap = { number.value=9 },//双击
                    onLongPress = {number.value=10},//长按
                    onTap = {number.value = 3}//按下松开

                )
            }
            .background(Color.LightGray)
            .padding(horizontal = 50.dp, vertical = 40.dp)
    )

}

2. 滚动修饰符

内部改变状态 

// 滚动修饰符
@Composable
fun ScrollBoxes(){
    Column(
        Modifier
            .background(Color.LightGray)
            .size(100.dp)
            .verticalScroll(rememberScrollState())
    ) {
        //从零开始的
        repeat(10){
            Text(text = "ite, $it",Modifier.padding(2.dp))
        }
    }

外部改变状态

//借助ScrollState,您可以更改滚动位置或获取当前状态
@Composable
fun ScrollBoxesSmooth() {
    val state = rememberScrollState()
    // 设置一个较慢的动画过渡时间
    val animationSpec = TweenSpec<Float>(durationMillis = 1000)
    LaunchedEffect(Unit) {
        //慢慢滚动变成100
            state.animateScrollTo(300,animationSpec)
    }

    Column(
        Modifier
            .background(Color.LightGray)
            .size(100.dp)
            .verticalScroll(state)
    ) {
        //从零开始的
        repeat(10) {
            Text(text = "item $it", Modifier.padding(2.dp))
        }
    }
}

3.可滚动修饰符 

//可滚动的修饰符
//scrollable 修饰符与滚动修饰符不同,区别在于scrollable 可检测滚动手势,但不会便宜其内容.
@Composable
fun ScrollableSample(){

    val offset = remember {
        mutableStateOf(0f)
    }
    Box(modifier =
    Modifier
        .size(150.dp)
        .scrollable(
            orientation = Orientation.Vertical,
            state = rememberScrollableState { delta ->
                offset.value += delta//像素为单位
                delta
            }
        )
        .background(Color.LightGray),
        contentAlignment = Alignment.Center
    ){
            Text(text =offset.value.toString() )
    }


}

 4. 嵌套滚动

//嵌套滚动
@Composable
fun NestedScrollSample(){
    val  gradient = Brush.verticalGradient(
        0f to Color.Gray,1000f to Color.White
    )
    Box(modifier = Modifier
        .background(Color.LightGray)
        .verticalScroll(rememberScrollState())
        .padding(32.dp)){
        Column {
            repeat(6){
                Box(modifier = Modifier
                    .height(128.dp)
                    .verticalScroll(rememberScrollState())){
                    Text(text = "Scroll here",
                        modifier = Modifier
                            .border(12.dp, Color.DarkGray)
                            .background(brush = gradient)
                            .padding(24.dp)
                            .height(150.dp))//Text 高度大于外部容器Box的高度
                }
            }
        }
    }
}

 5.拖动

//拖动
@Composable
fun DraggableSample() {

    var offsetX by remember { mutableStateOf(0f) }
    var offsetY by remember { mutableStateOf(0f) }
    Box(modifier = Modifier
        .draggable(
            orientation = Orientation.Horizontal,
            state = rememberDraggableState {
                offsetX += it
            }
        ) .draggable(
            orientation = Orientation.Vertical,
            state = rememberDraggableState {
                offsetY += it
            }
        )
        .offset(x = offsetX.dp, y = offsetY.dp)
        .background(Color.Yellow)){
        Text(
            text = "Drag me!", textAlign = TextAlign.Center, modifier = Modifier.padding(30.dp)
        )
    }
}

//拖动 如果您需要控制整个拖动手势,请考虑改为通过pointerInput修饰符使用拖动手势检测器
@Composable
fun DraggableWhereYouWantSample() {

    Box(modifier = Modifier.fillMaxSize()) {

        var offsetX by remember { mutableStateOf(0f) }
        var offsetY by remember { mutableStateOf(0f) }
        Box(modifier = Modifier
            .offset { IntOffset(offsetX.roundToInt(), offsetY.roundToInt()) }
            .background(Color.Blue)
            .size(50.dp)
            .pointerInput(Unit){
                //拖动的手势
                detectDragGestures { change, dragAmount ->

                    offsetX+=dragAmount.x
                    offsetY+=dragAmount.y

                }
            }.align(Alignment.BottomEnd)
        )

    }

}

6.滑动

新版本被废弃了

7.多点触控 

//多点触控:平移 缩放 旋转
@Composable
fun TransformableSample(){

    var scale by remember {
        mutableStateOf(1f)//缩放
    }
    var rotation by remember {
        mutableStateOf(0f)//旋转
    }
    var offset by remember {
        mutableStateOf(Offset.Zero)//平移
    }
    val state = rememberTransformableState{zoomChange//缩放
                                           , panChange//平移
                                           , rotationChange//旋转
        ->
        scale*=zoomChange
        rotation+=rotationChange
        offset+=panChange
    }
    Box(modifier = Modifier
        .graphicsLayer(
            scaleX = scale,
            scaleY = scale,
            rotationZ = rotation,
            translationX = offset.x,
            translationY = offset.y
        )
        .transformable(state =  state)
        .background(Color.Blue)
        .size(100.dp,200.dp))
}

 

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

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

相关文章

UE5.2 SmartObject使用实践

SmartObject是UE5新出的一项针对AI的功能&#xff0c;可为开发者提供如公园长椅、货摊等交互对象的统一外观封装&#xff0c;如UE的CitySample&#xff08;黑客帝国Demo&#xff09;中就运用到了SmartObject。 但SmartObject实践起来较为繁琐&#xff0c;主要依赖于AI及行为树…

python爬虫(9)之requests模块

1、获取动态加载的数据 1、在开发者工具中查看动态数据 找到csdn的门户的开发者工具后到这一页面。 2、加载代码 import requests headers {User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36…

iOS17.4获取UDID安装mobileconfig描述文件失败 提示“安全延迟进行中”问题 | 失窃设备保护

iOS17.4这两天已经正式发布&#xff0c; 在iOS 17.4版本中新增了一个名为"失窃设备保护"的功能&#xff0c;并提供了一个"需要安全延迟"的选项。 iOS17.4获取UDID安装mobileconfig描述文件失败 提示“安全延迟进行中”问题 | 失窃设备保护 当用户选择启用…

#LLM入门|Prompt#2.8_搭建一个带评估的端到端问答系统

在这一章节中&#xff0c;我们将会构建一个集成评估环节的完整问答系统。这个系统将会融合我们在前几节课中所学到的知识&#xff0c;并且加入了评估步骤。以下是该系统的核心操作流程&#xff1a; 对用户的输入进行检验&#xff0c;验证其是否可以通过审核 API 的标准。若输入…

植物病虫害:YOLO玉米病虫害识别数据集

玉米病虫害识别数据集&#xff1a;玉米枯萎病&#xff0c;玉米灰斑病&#xff0c;玉米锈病叶&#xff0c;粘虫幼虫&#xff0c;玉米条斑病&#xff0c;黄二化螟&#xff0c;黄二化螟幼虫7类&#xff0c;yolo标注完整&#xff0c;3900多张图像&#xff0c;全部原始数据&#xff…

青少年软件编程(图形化)等级考试试卷(三级)

青少年软件编程&#xff08;图形化&#xff09;等级考试试卷&#xff08;三级&#xff09; 分数&#xff1a;100 题数&#xff1a;38 总体情况姓名开始时间结束时间用时(分钟)得分得分率是否通过考试状态xXx2023-03-192023-03-1959.5769.50.7Y已评卷 一、单选题(共25题&#x…

数据结构之树(Topk问题, 链式二叉树)

一.topk问题 取N个数中最大(小)的前k个值,N远大于k 这道题可以用堆的方法来解决,首先取这N个数的前k个值,用它们建堆 时间复杂度O(k) 之后将剩余的N-k个数据依次与堆顶数据进行比较,如果比堆顶数据大,则将堆顶数据覆盖后向下调整 时间复杂度(N-k)*log(N) 总共的时间复杂度…

2024年独立站C端只靠SEO还有机会吗?(川圣SEO)蜘蛛池

baidu搜索&#xff1a;如何联系八爪鱼SEO&#xff1f; baidu搜索&#xff1a;如何联系八爪鱼SEO&#xff1f; baidu搜索&#xff1a;如何联系八爪鱼SEO&#xff1f; 2024年独立站C端只靠SEO还有机会吗&#xff1f;#蜘蛛池SEO 都2024年了&#xff0c;你的外贸独立站推广还需要…

Xilinx 7系列FPGA的配置流程

目录 1.4配置流程 1.4.1 设备上电 ​编辑1.4.2 清除配置寄存器 1.4.3 采样模式引脚 1.4.4 同步 ​编辑1.4.5 检测设备ID ​编辑1.4.6 加载配置数据 1.4.7 CRC校验 1.4.8 启动序列 1.4配置流程 对于所有配置模式&#xff0c;7系列的基本配置流程都是相同的&…

高速USB3.0接口控制器芯片--T630

T630芯片是方寸微电子自主研发的USB3.0超高速控制器&#xff0c;具有功能丰富、性能强劲、扩展性强等特点&#xff0c;可广泛应用于视频采集卡、视频会议摄像头、监控摄像头、数字摄录机、工业照相机、测量和测试设备、医疗成像设备、打印机、扫描仪、指纹采集终端等众多电子产…

记事小本本

记事小本本 实现效果 相关代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</titl…

TRANSCEIVER 中的LPM和DFE模块

接收端都使用了通信中常用的LPM和DFE 本质上是高通滤波器&#xff0c;一个是单项被动&#xff0c;而常用的DFE用 了反馈。参见这篇不错的文章。 赛灵思7系列FPGA GT收发器中的RX均衡器_lpm和dfe-CSDN博客

C#,T检验(T -Test)的算法与源代码

1 T-Test 学生t检验(英语:Students t-test)是指虚无假设成立时的任一检定统计有学生t-分布的统计假说检定,属于母数统计。学生t检验常作为检验一群来自正态分配母体的独立样本之期望值的是否为某一实数,或是二群来自正态分配母体的独立样本之期望值的差是否为某一实数。举…

Android自定义view从入门到高级

简介 什么是自定义view&#xff1f;我认为只要不是编译器直接提供可以使用的view&#xff0c;都可以认为是自定义view。自定义view主要分为两大类&#xff0c;第一类自定义view可以通过系统提供的各种view组合&#xff0c;样式变化实现的view。第二类是通过继承view或者ViewGro…

​高山 MPV 四驱旗舰版:新能源时代的豪华出行新选择

随着新能源技术的不断进步和消费者对高端出行体验的追求&#xff0c;MPV&#xff08;Multi-Purpose Vehicle&#xff0c;多用途车&#xff09;市场迎来了新的发展机遇。 长城汽车旗下的魏牌&#xff0c;凭借其在新能源领域的深厚技术积累&#xff0c;推出了全新的高山MPV四驱旗…

用通俗易懂的方式讲解:大模型 Rerank 模型部署及使用技巧总结

Rerank 在 RAG&#xff08;Retrieval-Augmented Generation&#xff09;过程中扮演了一个非常重要的角色&#xff0c;普通的 RAG 可能会检索到大量的文档&#xff0c;但这些文档可能并不是所有的都跟问题相关&#xff0c;而 Rerank 可以对文档进行重新排序和筛选&#xff0c;让…

【Python 5】----Pytest接口自动化(实现基础的测试框架)

安装准备 安装好pytest的环境及allure环境 1. 安装pytest pip insatll pytest2.安装allure (需要确保安装了jdk环境&#xff09;安装allure命令行&#xff1a; 访问allure官网&#xff0c;下载allure2.13.5的安装包&#xff0c;将其bin路径 添加进环境变量path中在cmd里面…

flutter选择国家或地区的电话号码区号

1.国家区号列表&#xff08;带字母索引侧边栏&#xff09; import package:generated/l10n.dart; import package:widget/login/area_index_bar_widget.dart; import package:flutter/material.dart; import package:flutter_screenutil/flutter_screenutil.dart;class LoginA…

位图、布隆过滤器

普通的哈希表增删查改的效率的确达到了令人满意的O&#xff08;1&#xff09;&#xff0c;但是本质还是以空间换时间来实现的。并且哈希表中是直接存储数据的&#xff0c;应对一些海量数据处理的问题可能就会造成空间不足的问题。 加入现有40亿个无符号整形数字&#xff0c;设…

RPC基础知识回顾

RPC基础知识回顾 1、先认识一下大家熟悉的HTTP 大家都了解HTTP吧。相信项目中也用过一些。 比如: JDK自带的老旧的HttpURLConnection&#xff0c;封装写的很累,java8之前基于HTTP1.0。在java9开始支持Http2.0Spring的其中RestTemplate都是基于HTTP/1.1的请求。最新的还有Sp…