首页 > 其他分享 >语言录制兼容长按跟点击录制

语言录制兼容长按跟点击录制

时间:2023-04-22 16:33:37浏览次数:27  
标签:触摸 录制 兼容 抬起 点击 事件

录音需求中,往往有两种常规操作。

长按基本实现流程:

监听触摸事件,按下时录制,抬起时停止。

点击基本流程:

点击开始录制,在次点击停止录制

但是凡事有绝对,如果需要同时支持长按录制抬起结束跟点击录制在次点击结束呢?面对如此无理的需求,从技术层面上怎么如丝滑般去兼容呢。

需要两者兼容,只能从触摸事件入手了,这里的重点其实就在于怎么在触摸事件中去区分点击事件跟触摸事件

功能可能并不难,但是没有一个好的思路,就会导致代码逻辑混乱,不好维护,并且代码过多,不够简洁。

先看效果图,前面是点击事件,后面是触摸长按。

 

首先把开始录制跟结束方法写好,在触摸事件里,按下时录制,抬起时结束,等于是长按录制的逻辑

在此基础上想要兼容点击逻辑,其实只要一个限制就行,那就是点击的时间。

正常情况下我点击后依次经历了按下跟抬起两个事件(触摸不做处理),那我加个点击时间,如果间隔小于800毫秒,就不做处理。

这时候我点击只会触发一次按下事件,等我下次点击时,已经超过了800毫秒,并且可以防止快速点击,一举两得(快速点击录制时长过短,需要限制,禁止无意义操作)。

在回到触摸逻辑,我点击录制,不松手,超过800毫秒,此时我在抬起,直接触发抬起事件,逻辑如丝滑般柔顺。

ivRecord.setOnTouchListener { _, event ->
            if (abs(System.currentTimeMillis() - downTimeInMillis) >= 800L) {
                when (event.action) {
                    MotionEvent.ACTION_DOWN -> {
                        start()
                    }
                    MotionEvent.ACTION_CANCEL,
                    MotionEvent.ACTION_UP -> {
                        stop()
                    }
                }
            }
            true
        }

一行 if 判断,完美兼容两种录制模式,简单明了。

 

标签:触摸,录制,兼容,抬起,点击,事件
From: https://www.cnblogs.com/LiuZhen/p/17343285.html

相关文章

  • 电脑装机兼容性检查
    处理器(CPU)与主板(Motherboard):插槽(Socket)类型:确保处理器插槽与主板插槽相匹配(例如,AMDAM4或IntelLGA1200)。主板(Motherboard)与机箱(Case):尺寸(FormFactor):确保主板尺寸与机箱兼容(例如,ATX、Micro-ATX或Mini-ITX)。内存(RAM)与主板(Motherboard):类型......
  • VUE3 里面使用 vuedraggable 兼容tag="transition"的问题
    vue3的拖拽tag="transition"报的错误TypeError:Cannotsetpropertiesofnull(setting'__draggable_context')安装拖拽的时候,使用命令yarnadd@marshallswain/vuedraggable 下载这个包,把dist里面的文件复制到项目里面引入即可,不要使用 yarnaddvuedraggable@nex......
  • web(XSS,CSRF,点击劫持,URL跳转)
    搜索被黑网站:关键字:Hackedby搜索引擎语法:Intitle:keyword标题中含有关键词的网页Intext:keyword正文中含有关键词的网页Site:domain在某个域名和子域名下的网页XSS全称:CrossSiteScript               中文名称:跨站脚本危害:盗取用户信息、钓鱼、......
  • 网易云信上传图片 点击两次才能上传图片
    网易云信上传图片点击两次才能上传图片原因:之前异步比打开文件夹先执行需要按两次才能上传文件fileInputElement.value的值永远是需要监视文件选择器有没有选择文件,如果选择了再执行异步,没有选择就取消constfileInputElement=ref<null|HTMLElement>(null);cons......
  • vue-input-directive 插件的使用(已兼容vue3.0)
    codepen体验地址github地址安装、引入npminstallvue-input-directive--saveimportVuefrom'vue'importinputValidatefrom'vue-input-directive'Vue.use(inputValidate)1、d-input-max 输入数字限制最大值<el-inputv-d-input-max="99.99"v-......
  • vue兼容IE的方法规范
    第三方插件的兼容性需经过ie和国产电脑浏览器测试后,才可以使用。1、main.js顶部添加babel-polyfillimport'babel-polyfill'importVuefrom'vue'importAppfrom'./App.vue'importrouterfrom'./router'importstorefrom'./store'2、js-base6......
  • ASP.NET点击按钮回车提交web页面回车提交点击回车按钮提交
    ASP.NET回车提交事件其实说到底并不是ASP.NET的编程问题,却是关于htmlform中的submit按钮就是如何规划的具体讨论。也可归于ASP.NET编程的一部分,那么ASP.NET回车提交事件的具体实现是怎么样的呢?下面我们具体的看下:ASP.NET回车提交事件实现1、当你的光标焦点进入某个表单元素......
  • 16-浏览器的兼容性问题
    title:16-浏览器的兼容性问题publish:false我们在div里放一个img,发现:在html和html5中,div的长宽是不同的,后者的高度要超过几个像素。比如说,下面这个是html的。<!DOCTYPEhtml><htmllang="en"><head> <metacharset="UTF-8"> <title>Document</title> ......
  • 基于.Net开发的ChatGPT客户端,兼容Windows、IOS、安卓、MacOS、Linux
    2023年目前要说最热的点,肯定是ChatGPT了。ChatGPT官方提供的网页版本,还有需要科*上网,很多人都会基于此进行封装。现在是移动互联网时代,基于手机APP的需求还是很大的。所以,今天给大家推荐一个ChatGPT客户端开源项目,兼容苹果和安卓手机、PC。项目简介这是基于C#开发的客户端,兼......
  • Web 下载文件名乱码解决以及多浏览器兼容方案
    在web开发中,经常我们会遇到如导出或者下载网页这种需求,但是往往会遇到在chrome浏览器下载的文件名正常,但是到firefox,Safari上却乱码的情况,经过网上的资料多次研究,最终总结出了如下的方法,代码如下:///<summary>///浏览器下载文件,完整文件下载,不支持分片下载,为了兼容safari,下......