欢迎使用CSDN-markdown编辑器
来源:互联网 发布:织梦58公司 编辑:程序博客网 时间:2024/05/16 20:30
高大上实现再点一次退出应用
话不多说,先上代码
long[] mHits = new long[2]; /** * 为主界面的回退事件做处理 */ @Override public void onBackPressed() { System.arraycopy(mHits, 1, mHits, 0, mHits.length - 1); mHits[mHits.length - 1] = SystemClock.uptimeMillis(); if (SystemClock.uptimeMillis() - mHits[0] <= 2000) { // 如果第一次点击时间和第二次点击时间相差在2000ms之内的话,就可以视为双击事件 finish(); } else { Toast.makeText(getApplicationContext(), "再点一次退出", Toast.LENGTH_SHORT).show(); } }
涉及到的核心方法是System.arraycopy(Object src, int srcPos, Object dst, int dstPos, int length);
含义:
从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。从 src 引用的源数组到 dest 引用的目标数组,数组组件的一个子序列被复制下来。被复制的组件的编号等于 length 参数。源数组中位置在 srcPos 到 srcPos+length-1 之间的组件被分别复制到目标数组中的 destPos 到 destPos+length-1 位置
- Object src:原数组。
- int srcPos:源数组中的起始位置。
- Object dst:目标数组。
- int dstPos:目标数据中的起始位置
- int length:要复制的数组元素的数量。
ok,来看看原理吧
- 首先,我们创建了一个length为2的空数组,方便存放点击时间,这时候里边元素默认都是0
- 接下来我们给数组第二个元素存入当前时间即SystemClock.uptimeMillis(),注意,此时第一个元素仍然是0
- 接下来就是数组复制了,这也是System.arraycopy的核心用处了,让srcPos=1,length=mHits.length - 1,就是我们需要从1开始复制length个长度的元素(当然,此处只有一个元素),复制到的数组也是mHits,即从第一个元素开始存放之前需要复制的元素(即1至length元素)。
- 上边其实就相当于一个FIFO的数组,第二个元素的点击时间比第一个靠后,每点击一次,第一个元素出栈,其他元素角标往前移,而当前点击时间存在最后一个,完成数组更新
- 所以上边的数组只会存放当前点击时间和之前一次的点击时间,那么我们只需要两者比较时间差就行了
了解了上面的原理之后,多击事件也是手到擒来的啦,
long[] mHits = new long[N]; public void isNClick(View v){ System.arraycopy(mHtits,1,mHits,0,mHits.length-1); mHits[mHits.length-1] = SystemClock.upTimeMillis(); if(mHits[mHits.length-1]-mHits[0]<=500){ //如果第一次点击时间和最后一次点击时间相差在500ms之内的话,就可以视为多击事件 } }
怎么样,代码量不多,而且通用性极好,赶紧拿来用吧
0 0
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- linux下IPTABLES配置详解
- 设计模式之命令模式
- LeetCode学习之路-Longest Substring Without Repeating Characters
- 高德自定义marker
- java读取工程里面的文件
- 欢迎使用CSDN-markdown编辑器
- 常用RGB颜色表
- java NIOSocket 通信简要举例
- Linux iptables开启80端口
- 初识caffe之python mnist训练
- 什么是域名?什么网站名?什么是URL?
- JAXB 可以实现Java对象与XML的相互转换
- 颜色模式
- maven项目发布到tomcat里lib包没有发布的问题