Android 单双击实现的方法步骤
程序员文章站
2022-03-04 17:05:03
记录单击、双击实现过程,进行简单的封装,便于复用,包括常用的软件双击退出。
双击实现:记录第一次点击时间,在设定时间内再次点击,则返回监听事件,否则不做处理;applicatio...
记录单击、双击实现过程,进行简单的封装,便于复用,包括常用的软件双击退出。
双击实现:记录第一次点击时间,在设定时间内再次点击,则返回监听事件,否则不做处理;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进行处理;采用抽象类抽象方法,也可使用接口封装进行处理。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。