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


猜你喜欢
- 关于base64编码Encode和Decode编码的几种方式Base64是一种能将任意Binary资料用64种字元组合成字串的方法,而这个B
- springboot项目main函数启动在controller包下新建appController类package controller;im
- 1.与过滤器filter的区别2.springMVC中 * 的必须实现的三个方法:3. * 类的编写:package com.imooc.
- 在value目录下,创建styles.xml文件<?xml version="1.0" encoding=&quo
- 前言这几天看《Java并发编程之美》的时候又遇到了ThradLocal这个类,不得不说,这个类在平时很多场景都遇得到,所以对其进行一个系统性
- 背景2021年第一天早上,客户突然投诉说系统的一个功能出了问题,紧急排查后发现后端系统确实出了bug,原因为前端传输的JSON报文,后端反序
- JSONObject toJSONString错误1.com.alibaba.fastjson.JSONObject 继承了JSON可以使用
- 自定义控件在android中无处不见,自定义控件给了我们很大的方便。比如说,一个视图为imageview ,imagebutton ,tex
- SpringMVC文件上传中要解决的问题一、中文文件名编码问题通过过滤器解决二、文件位置存储问题放在当前项目下,作为静态资源,这样可以通过U
- java解决动态配置字段需求是否在开发中遇到有像下图一样管理员配置多个字段让用户填写的需求我的实现方式是通过数据库存储动态json的显示实现
- springboottest测试依赖和使用<dependency> <groupId>or
- 本文实例讲述了C#设计模式之Mediator中介者模式解决程序员的七夕缘分问题。分享给大家供大家参考,具体如下:一、理论定义中介者模式&nb
- 上篇文章已经对Synchronized关键字做了初步的介绍,从字节码层面介绍了Synchronized关键字,最终字节码层面就是monito
- 1.会话会话: 用户打开了一个浏览器,点击了很多超链接,访问多个web次元,关闭浏览器,这个过程可以称之为会话有状态会话: 带有访问记录的会
- 先上效果图源码 github.com/woshiwzy/Ca…实现原理:1.继承LinearLayout2.重写onL
- 今天在别人的代码基础上实现新需求,看到对于mybatis查询结果的判断不是很正确,如果查询结果为空就会异常,不知道大家有没有这样的疑惑:my
- 一、C#语言的简单介绍根据微软官网的介绍,C#是为.NET平台量身订做的一种面向对象的语言,它与Java类似都属于从C++演变(提取了C++
- 美团电商应用平台大家使用非常频繁,下面小编通过本文给大家介绍电商应用平台中常用的选择类别下拉列表的实现。先给大家展示下效果图:一、下拉列表的
- Spring Boot 集成MyBatis在集成MyBatis前,我们先配置一个druid数据源。Spring Boot 集成druiddr
- 前言该设计是一款轻量级的便签工具,使用Android Studio开发,风格简练,可实现便签的添加、删除、修改、查看功能。为保证一定的安全性