Android 单双击实现的方法步骤
作者:几圈年轮 发布时间:2023-04-19 02:19:31
标签:Android,单双击
记录单击、双击实现过程,进行简单的封装,便于复用,包括常用的软件双击退出。
双击实现:记录第一次点击时间,在设定时间内再次点击,则返回监听事件,否则不做处理;Application双击退出亦是同样的实现逻辑。
/**
* 双击实现
*
* @author 几圈年轮
*/
public abstract class BaseDoubleClickListener implements View.OnClickListener {
private static final long DOUBLE_TIME = 500;
private static long lastClickTime = 0;
@Override
public void onClick(View v) {
long currentTimeMillis = System.currentTimeMillis();
if (currentTimeMillis - lastClickTime < DOUBLE_TIME) {
onDoubleClick(v);
}
lastClickTime = currentTimeMillis;
}
/**
* 双击事件
*
* @param v 视图
*/
public abstract void onDoubleClick(View v);
}
调用方式:
view.setOnClickListener(new BaseDoubleClickListener() {
@Override
public void onDoubleClick(View v) {
}
});
Application双击退出:
private long onBackPressedTime;
@Override
public void onBackPressed() {
long timeSpan = System.currentTimeMillis() - onBackPressedTime;
onBackPressedTime = System.currentTimeMillis();
if (timeSpan > 2000) {
Toast.makeText(this, getResources().getString(R.string.exit), Toast.LENGTH_SHORT).show();
} else {
super.onBackPressed();
}
}
单击及双击实现:使用Handler进行延时消息发送,通过计数获取点击次数,若设定时间内点击两次则返回双击事件;单次,则返回单击事件。
/**
* 单击、双击实现
*
* @author 几圈年轮
*/
public abstract class BaseClickListener implements View.OnClickListener {
private static final int TIMEOUT = 400;
private int clickCount = 0;
private Handler handler;
protected BaseClickListener() {
handler = new Handler();
}
@Override
public void onClick(View v) {
clickCount++;
handler.postDelayed(new Runnable() {
@Override
public void run() {
if (clickCount == 1) {
onSingleClick(v);
} else if (clickCount == 2) {
onDoubleClick(v);
}
handler.removeCallbacksAndMessages(null);
clickCount = 0;
}
}, TIMEOUT);
}
/**
* 单击实现
*
* @param v 视图
*/
public abstract void onSingleClick(View v);
/**
* 双击实现
*
* @param v 视图
*/
public abstract void onDoubleClick(View v);
}
调用方式:
view.setOnClickListener(new BaseClickListener() {
@Override
public void onSingleClick(View v) {
}
@Override
public void onDoubleClick(View v) {
}
});
主要重写了View的OnClickListener事件,也可以重写OnTouchListener进行处理;采用抽象类抽象方法,也可使用接口封装进行处理。
来源:https://www.jianshu.com/p/83b483401a9d
0
投稿
猜你喜欢
- 本文实例为大家分享了Java实现简单员工管理系统的具体代码,供大家参考,具体内容如下代码如下:import java.util.*;publ
- webservice restful接口跟soap协议的接口实现大同小异,只是在提供服务的类/接口的注解上存在差异,具体看下面的代码,然后自
- 一、任务和执行策略之间的隐性耦合Executor可以将任务的提交和任务的执行策略解耦只有任务是同类型的且执行时间差别不大,才能发挥最大性能,
- 在我的工作经验中,在C#语言本身的学习上花了大量的时间,积累了一些经验,一些是在学习和工作中遇到的问题和解决办法分享出来,希望大家也能有收获
- Word中设置水印时,可加载图片设置为水印效果,但通常添加水印效果时,会对所有页面都设置成统一效果,如果需要对每一页或者某个页面设置不同的水
- 一、代理的概念 * 技术是整个java技术中最重要的一个技术,它是学习java框架的基础,不会 * 技术,那么在学习Spring这些框架
- 一、判断语句最常用的顺序结构只能顺序执行,并不能进行判断和选择。于是便有了下面两种分支结构if语句switch语句1. if语句一个if语句
- 本文实例为大家分享了java实现订餐系统的具体代码,供大家参考,具体内容如下import java.util.Scanner;public
- 这篇文章主要介绍了如何实现java Iterator迭代器功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,
- 用java压缩/解压文件: import java.io.*; import java.awt.*; import java.aw
- 前言RefreshIndicator是Flutter里常见的下拉刷新组件,使用是比较方便的。但由于产品兄弟对其固定的刷新样式很是不满,而且代
- 在Java的内存分配中,总共3种常量池:Java 常量池详解(二)class文件常量池 和 Java 常量池详解(三)class运行时常量池
- 图形验证码属于老生常谈了,具体细节这里就不说了。生成图形验证码的办法非常多,今天讲解一种通过Kaptcha组件快速生成图形验证码的方法。Ka
- 前言之前在SpringBoot项目中简单使用定时任务,不过由于要借助cron表达式且都提前定义好放在配置文件里,不能在项目运行中动态修改任务
- cookies的创建:在客户端创建一个username的cookies,其值为oneday,有效期为1天.方法1:Response.Cook
- Spring Framework 提供了一套可以方便地对 Controller 层中接收的参数进行校验的框架,其中就包括了 @Validat
- 首先来看看以下程序将会打印出什么:class Dog { public static void bark
- Java 里的 * 是动态拦截 action 调用的对象,它提供了一种机制可以使开发者可以定义在一个 action 执行的前后执行的代码,也
- 循环语句就是让计算机根据条件做循环计算,在条件满足时继续循环,条件不满足时退出循环。Java提供了while条件循环。它的基本用法是:whi
- 具体详情如下所示:int -> Stringint i=12345;String s="";第一种方法:s=i+&