android 手机主界面侧滑退出app问题
最近重新搭了个app,发现手机显示APP主界面时,沿着手机右边向左滑,会直接关闭应用,所以想搞个第一次提示,第二次退出app的效果。
结果搞出个复杂的东西,下面是两段代码。1:
1:GestureDetector+扩展函数。其实这个我觉得自己写的挺好,在一些不是系统级的滑动场景下应该有用。但时在返回退出这个需求上无法监听,实现效果。。。
class SwipeGestureListener(private val context:Context,private val onSwipeLeft:()->Unit):GestureDetector.SimpleOnGestureListener() {override fun onFling(e1: MotionEvent,e2: MotionEvent,velocityX: Float,velocityY: Float): Boolean {Log.e("滑动","onFling")val deltaX =e2.x -e1.xval deltaY =e2.y -e1.yif (Math.abs(deltaX)>Math.abs(deltaY) && deltaX<0){onSwipeLeft.invoke()return true}return false}// override fun onScroll(
// e1: MotionEvent,
// e2: MotionEvent,
// distanceX: Float,
// distanceY: Float
// ): Boolean {
// Log.e("滑动","onScroll")
// // 判断手势为从右到左的滑动,并且滑动距离较大
// if (distanceX < 0 && Math.abs(distanceX) > Math.abs(distanceY)) {
// onSwipeLeft.invoke()
// return true
// }
//
// return false
// }}/*** AppCompatActivity的扩展函数。*/
fun AppCompatActivity.setupSwipeGesture(view: View,onSwipeLeft: () -> Unit
):GestureDetector{val gestureDetector =GestureDetector(this,SwipeGestureListener(this,onSwipeLeft))view.setOnTouchListener{_,event->gestureDetector.onTouchEvent(event)}return gestureDetector
}
理解这段代码需要考虑两个主要部分:SwipeGestureListener 类和 setupSwipeGesture 扩展函数。
首先,SwipeGestureListener 类是一个实现了 GestureDetector.SimpleOnGestureListener 的监听器,用于处理左滑手势。它有一个构造函数,接受一个 Context 和一个 lambda 表达式 onSwipeLeft: () -> Unit。在 onFling 方法中,我们检测手势为向左滑动,并在满足条件时调用传入的 onSwipeLeft lambda 表达式。
接下来,我们有一个扩展函数 setupSwipeGesture,它是一个在 AppCompatActivity 上定义的扩展函数。这个函数接受一个 lambda 表达式 onSwipeLeft: () -> Unit,并返回一个 GestureDetector 对象。在这个函数中,我们创建了一个 SwipeGestureListener 实例,并将传入的 onSwipeLeft lambda 表达式作为参数传递。然后,我们设置 onTouchListener,并在其中调用 gestureDetector.onTouchEvent(event),以处理触摸事件。
最后,在 MainActivity 中,我们在 onCreate 方法中调用了 setupSwipeGesture,并传入了一个处理左滑的 lambda 表达式 handleLeftSwipe。在 handleLeftSwipe 方法中,我们根据时间间隔判断是否显示退出提示。
class MainActivity : AppCompatActivity() {private lateinit var gestureDetector: GestureDetectorprivate var lastSwipeTime: Long = 0override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)gestureDetector = setupSwipeGesture {handleLeftSwipe()}}private fun handleLeftSwipe() {val currentTime = System.currentTimeMillis()// 如果两次左滑的时间间隔小于2秒,且次数为1,显示提示if (currentTime - lastSwipeTime < 2000) {showExitToast()finish()}// 更新上一次左滑时间lastSwipeTime = currentTime}
}
总的来说,这段代码的原理是通过使用 GestureDetector 和 SwipeGestureListener 来监听左滑手势,然后在满足条件时执行特定的逻辑。这样的设计使得代码更加模块化和易于理解。
2.老办法onKeyDown,简单好用
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {if (keyCode == KeyEvent.KEYCODE_BACK && event?.action == KeyEvent.ACTION_DOWN){if (System.currentTimeMillis() - lastSwipeTime > 2000) {lastSwipeTime = System.currentTimeMillis()"再按一次退出".showToast(this)Log.e("","再按一次退出")} else {finish()}return true}return super.onKeyDown(keyCode, event)}
这个就不用解释了吧。
相关文章:
android 手机主界面侧滑退出app问题
最近重新搭了个app,发现手机显示APP主界面时,沿着手机右边向左滑,会直接关闭应用,所以想搞个第一次提示,第二次退出app的效果。 结果搞出个复杂的东西,下面是两段代码。1: 1:GestureDetector扩展函数。其…...
spring boot 配置全局日期和时间格式
spring boot 为项目配置 全局日期和时间格式化yyyy-MM-dd HH:mm:ss 方式一:代码配置全局日期和时间格式化 /*** author hua*/ Configuration public class WebConfiguration implements WebMvcConfigurer {/*** 项目全局时间格式化*/ Bean public ObjectMapper get…...
GoLang学习之路,对Elasticsearch的使用,一文足以(包括泛型使用思想)(二)
书写上回,上回讲到,Elasticsearch的使用前提即:语法,表结构,使用类型结构等。要学这个必须要看前面这个:GoLang学习之路,对Elasticsearch的使用,一文足以(包括泛型使用思…...
鸿蒙APP的代码规范
鸿蒙APP的代码规范是为了确保代码质量、可读性和可维护性而定义的一系列规则和标准。以下是一些建议的鸿蒙APP代码规范,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1. 代码风格: 采用…...
蓝桥杯-每日刷题-027
出租汽车计费器 一、题目要求 题目描述 有一个城市出租汽车的计费规则是3公里内(含3公里)基本费6元,超过3公里,每一公里1.4元。 现在对于输入具体的公里数x(0<x<1000),编程计算x公里所需…...
安装Node修改Node镜像地址搭建Vue脚手架创建Vue项目
1、安装VSCode和Node 下载VSCode Visual Studio Code - Code Editing. Redefined 下载Node Node.js (nodejs.org) 检验是否安装成功,WinR,输入cmd命令,使用node -v可以查看到其版本号 2、修改镜像地址 安装好node之后,开始修改镜像地址 …...
git 学习 之一个规范的 commit 如何写
最好的话做一件完整的事情就提交一次...
2023 年人工智能研究与技术排名前 10 的国家
人工智能研究是一项全球性的工作。虽然美国和中国因其对人工智能的贡献而备受关注,但事实是,世界各国都在涉足这项技术,尝试新的突破,并吸引投资者的关注。 斯坦福大学的《2023年人工智能报告》估计,到 2022 年&#…...
留言板(Mybatis连接数据库版)
目录 1.添加Mybatis和SQL的依赖 2.建立数据库和需要的表 3.对应表中的字段,补充Java对象 4.对代码进行逻辑分层 5.后端逻辑代码 之前的项目实例【基于Spring MVC的前后端交互案例及应用分层的实现】https://blog.csdn.net/weixin_67793092/article/details/134…...
第十二章 Sleuth分布式请求链路跟踪
Sleuth分布式请求链路跟踪 gitee:springcloud_study: springcloud:服务集群、注册中心、配置中心(热更新)、服务网关(校验、路由、负载均衡)、分布式缓存、分布式搜索、消息队列(异步通信)、数…...
EasyExcel多线程批量导出数据,动态表头,静态资源访问
1.导入依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.1</version></dependency>2.建立实体 Data public class ActResultLogVO implements Serializable {private static…...
树莓派界面改成中文
安装完树莓派系统(Raspberry Pi OS with Desktop),第一次启动时,时会有如下面二个图所示,让你选择区域时区和语言。 树莓派默认的语言为英文,如果你在安装时没有选择的话,默认的区域为英国,语言为英国英文&…...
软件工程期末复习
● 用例:借书 ●参与者:管理员,借阅者 ●操作流: ① 管理员进入图书借阅界面,用例开始。 ② 系统要求输入借阅者的借书证编码。 ③系统检验借书证编码,如果正确,则显示借阅者的信息。 A1:借书证编码有错。 A2: 如果该借…...
【linux】select实现定时器
/*秒级定时器*/ void seconds_sleep(unsigned long seconds) {if(seconds 0) return;struct timeval tv;tv.tv_secseconds;tv.tv_usec0;int err;do{errselect(0,NULL,NULL,NULL,&tv);}while(err<0 && errnoEINTR); }/*毫秒定时器*/void milliseconds_slee…...
Android 13 - Media框架(28)- MediaCodec(三)
上一节我们了解到 ACodec 执行完 start 流程后,会把所有的 input buffer 都提交给 MediaCodec 层,MediaCodec 是如何处理传上来的 buffer 呢?这一节我们就来了解一下这部分内容。 1、ACodecBufferChannel::fillThisBuffer ACodec 通过调用 A…...
Azure 学习总结
文章目录 1. Azure Function1.1 Azure Function 概念1.2 Azure Function 实现原理1.3 Azure Function 本地调试1.4 Azure Function 云部署 2. Azure API Managment 概念 以及使用2.1 Azure API 概念2.2 Azure API 基本使用 3. Service Bus 应用场景及相关特性3.1 Service Bus 基…...
数据库是否可以直接作为数据仓库的数据源
在数据仓库使用数据时,我们是否可以直接将数据库作为数据源?如果使用了,会存在哪些问题? 数据库中存储的是业务数据,存储方式是行式存储;而数据仓库中数据是以列式存储的;如果数据仓库要想使用…...
IntelliJ IDE 插件开发 | (四)开发一个时间管理大师插件
系列文章 IntelliJ IDE 插件开发 |(一)快速入门IntelliJ IDE 插件开发 |(二)UI 界面与数据持久化IntelliJ IDE 插件开发 |(三)消息通知与事件监听IntelliJ IDE 插件开发 |(四)开发一…...
【ChatGPT 默认强化学习策略】PPO 近端策略优化算法
PPO 近端策略优化算法 PPO 概率比率裁剪 演员-评论家算法演员-评论家算法:多智能体强化学习核心框架概率比率裁剪:逐步进行变化的方法PPO 目标函数的设计重要性采样KL散度 PPO 概率比率裁剪 演员-评论家算法 论文链接:https://arxiv.org…...
【银行测试】金融银行-理财项目面试/分析总结(二)
目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 银行理财相关的项…...
从零构建开源任务管理中枢:TaskWing部署、插件化与自动化实战
1. 项目概述:从零到一,打造你的个人任务管理中枢如果你和我一样,每天被各种待办事项、项目进度、临时想法和会议记录搞得焦头烂额,那么你肯定不止一次地想过:有没有一个工具,能真正“懂”我,能把…...
轻量级GraphRAG框架nano-graphrag:模块化设计与实践指南
1. 项目概述:一个为开发者而生的轻量级GraphRAG实现 如果你正在寻找一个能够快速上手、代码清晰、易于二次开发的GraphRAG(图增强检索生成)框架,那么 nano-graphrag 很可能就是你需要的那个工具。GraphRAG这个概念,简…...
ARM Firmware Suite与Integrator开发板嵌入式开发指南
1. ARM Firmware Suite与Integrator开发板概述ARM Firmware Suite(AFS)是ARM架构下专为嵌入式系统开发设计的固件套件,在Integrator系列开发板上发挥着核心作用。这套工具链最初由ARM Limited在1999-2002年间开发,至今仍在许多传统…...
别再算错了!等保2.0 2021版测评新规下,多系统/多机房得分计算保姆级教程
等保2.0 2021版多系统测评得分计算实战指南 当企业拥有多个机房或业务系统时,等保测评得分计算往往成为安全负责人最头疼的问题。2021版测评新规对多对象场景的计算方式进行了重要调整,这些变化直接影响最终得分和整改策略。本文将用真实案例拆解新旧计算…...
云原生 Kubernetes 核心概念与组件详解
目录 一、Kubernetes 是什么? 核心功能概览 二、部署演进:从物理机到容器 1. 传统部署时代 2. 虚拟化部署时代 3. 容器部署时代 三、Kubernetes 集群架构 1. 控制平面组件(集群大脑) (1)kube-apise…...
【Midjourney水墨风创作终极指南】:20年AI视觉专家亲授7大不可外传的Ink Wash参数配方与避坑清单
更多请点击: https://intelliparadigm.com 第一章:水墨风AI创作的认知革命与历史语境 水墨艺术承载着东方哲学中“虚实相生”“气韵生动”的深层认知范式,而当生成式AI介入水墨风格建模时,其本质并非简单纹理迁移,而是…...
计算机毕业设计:Python智慧医疗数据可视化与疾病预测系统 Flask框架 随机森林 机器学习 疾病数据 智慧医疗 深度学习(建议收藏)✅
博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久,选择我们就是选择放心、选择安心毕业✌ > 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与…...
LIO-SAM源码逐行解析:从因子图构建到多传感器融合实战
1. LIO-SAM技术架构解析 LIO-SAM(Lidar Inertial Odometry via Smoothing and Mapping)是Tixiao Shan博士在LeGO-LOAM基础上开发的激光-惯性紧耦合SLAM系统。它的核心创新点在于采用因子图优化框架,将IMU预积分、激光里程计、GPS和闭环检测四…...
别再到处找激活码了!手把手教你用vlmcsd在Windows上自建KMS服务器(附各版本密钥)
企业级Windows批量激活解决方案:安全高效的本地KMS部署指南 在数字化办公环境中,批量激活Windows操作系统一直是IT管理员面临的常见挑战。传统单机激活方式效率低下,而依赖外部KMS服务器又存在连接不稳定、隐私泄露等潜在风险。本文将深入探讨…...
如何通过HS2-HF Patch解锁《Honey Select 2》的完整创作潜力:从新手到专家的终极指南
如何通过HS2-HF Patch解锁《Honey Select 2》的完整创作潜力:从新手到专家的终极指南 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 还在为《Honey…...
