Android的多击事件实现
来源:互联网 发布:链表反转 递归java 编辑:程序博客网 时间:2024/05/17 08:33
首先,看普通双击事件的实现:
public class MainActivity extends AppCompatActivity { private ImageView mImage; private Button mButton; private long startTime = 0; //首次点击时间 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { mButton = (Button) findViewById(R.id.button); mButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //我们假设两次点击的时间间隔小于500ms为双击事件 if (startTime != 0){ long endTime = System.currentTimeMillis();//获取当前点击事件的时间戳 if ((endTime - startTime) <= 500){ Toast.makeText(MainActivity.this,"这是一次双击事件。。。",Toast.LENGTH_SHORT).show(); } } startTime = System.currentTimeMillis(); } }); }}
这里实现很简单,(假定我两次点击的时间间隔小于等于500ms即视为双击。)就是我点击第一次的时候记录第一次点击的时间戳,然后在第二次点击时判断是否是第一次点击,若不是,记录第二次点击的时间戳,然后用第二次的点击时间减去第一次的时间,比较即可。
下面是多击事件的实现思路以及演示实例:
这里用的是System.arrayCopy()方法,系统自带用于拷贝数组的一个方法,
该方法有五个参数,我们先来看一下它们都代表什么意思,
参数一:src 是我们要拷贝的源数组;
参数二:srcPos 这是拷贝原数组的指定索引,就是从原数组的第几个元素开始拷贝;
参数三:dest 指的是我们要拷贝到的目标数组;
参数四: destPos 就是我们指定目标数组接受的起始索引位置;
参数五:length 拷贝的长度,就是可以指定目标数组的拷贝长度,不一定要全部拷贝。
下图是arrayCopy的api文档:
当然,我们看到原数组与目标数组可以是同一个数组,但是实现原理是先将,原数组的需要拷贝的子数组拷贝到一个长度为length的临时数组,然后将该临时数组拷贝到目标数组,也就是原数组啦。
我们这里实现就是用的这种方式,先指定一个数组来记录我们要做的是“几击事件”。
先贴出代码吧。
public class MainActivity extends AppCompatActivity { private ImageView mImage; private Button mButton; private long[] mHits = new long[3];//先声明一个long类型的数组,数组的长度为3表示我要处理的是一个三击事件 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initUi(); } private void initUi() { mButton = (Button) findViewById(R.id.button); mButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { System.arraycopy(mHits,1,mHits,0,mHits.length-1); mHits[mHits.length-1] = System.currentTimeMillis(); if ((mHits[mHits.length-1] - mHits[0]) < 500){ Toast.makeText(MainActivity.this,"这是一次三击事件。。。",Toast.LENGTH_SHORT).show(); } } }); }}例如我这里声明一个mHits[]数组,如mHits[3],表示我要做的是三击处理,当我点击的时候:如下图
当点击第一次的时候,从原数组的第一个索引开始拷贝到目标数组的第一个索引位置,拷贝长度为length-1,由于我们的目标数组跟原数组是一个数组,我们发现目标数组的最后一个元素没有被拷贝,所以,在下面,我们有
mHits[mHits.length-1] = System.currentTimeMillis();将目标数组的最后一个设置成了当前点击时的时间戳;
一次类推,看图我们可以分析到,最后我们数组里记录的就是三次点击时的时间戳,只要最后一个元素的值减去第一个元素值,我们再判断这个值跟我们预设的时间间隔是否有出入就实现啦。。
似不似很简单呀。希望对大家有帮助。
- android 多击事件的实现方法
- Android多击事件的实现
- Android的多击事件实现
- Android点击事件的四种实现 + 多击事件
- 多击事件的实现
- Android双击事件的实现
- Android点击事件的实现
- android 双击事件的实现
- Android点击事件的实现
- 点击事件(多击事件的实现)
- Android程序:多按钮点击事件的常用功能实现
- 双击和多击事件的实现
- Android 中屏幕点击事件的实现
- Android 中屏幕点击事件的实现
- Android 中屏幕点击事件的实现
- Android 实现事件监听的两个方法
- Android 中屏幕点击事件的实现
- android中onClick事件的实现
- 【剑指offer】面试题 6:从尾到头打印链表
- 我遇到的问题:ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
- mybatis绑定多个mapper,@ResultMap 报错: Mapped Statements collection already contains value for xxx
- 在springmvc中使用hibernate-validate
- Bootstrap栅格系统详解,响应式布局
- Android的多击事件实现
- Unity 热更新(一):介绍
- 利用Windows内置工具测试硬盘速度
- JVM GC调优一则--增大Eden Space提高性能
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
- linux命令之Xargs用法详解
- 「美团 CodeM 初赛 Round A」二分图染色 容斥原理
- 抽象类与接口
- 有个需求 除去周六,周日的时间,工作时间以早上8点半到下午五点半,9小时,以现在时间为起始时间,给一个完成任务需要时间参数x小时 用个方法实现推动几月几号完成,这个方法好实现吗