Android按钮持续按下执行,Android 按钮长按下去重复执行某个动作,放开后停止执行动作...

Android开发中,常遇到一种需求,即按钮长按下去重复执行某个动作,放开后停止执行动作。网上找了许多代码,都没有适合的,于是自己动手写了一个。

基本思路是:首先设置一个标识变量,用于标识是否处于按下的状态。当按钮按下的时候,将标识变量设置为true,启动一个线程用于重复执行某个动作(当标识变量为true时,循环执行动作,当为false跳出循环,结束动作);当按钮弹起来的时候,将标识变量设置为false。

1、首先,设置标识变量

private boolean booleanConnect = false;

private Button rightSend;

2、然后,初始化变量

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

rightSend = (Button)findViewById(R.id.BtnRight);

longPress = false;

rightSend.setOnTouchListener(new View.OnTouchListener() {

@Override

public boolean onTouch(View v, MotionEvent event) {

String str = "OND\n";

String strSendData = new String(str);

LongTouchSendCmd(MainActivity.this, strSendData, event);

return true;

}

}

);

}

2、接着,实现按钮按下的重复执行动作

private void LongTouchSendCmd(final Activity activity, final String cmd, MotionEvent event){

if (booleanConnect == false) {

Toast.makeText(activity, "请先连接设备", Toast.LENGTH_SHORT).show();

return;

}

switch (event.getAction()) {

case MotionEvent.ACTION_DOWN: {

longPress = true;

Toast.makeText(activity, "开始发送", Toast.LENGTH_SHORT).show();

longPressSendCmdThread = new Thread() {

public void run() {

super.run();

while (true) {

if (longPress == true)//长按连续发送命令

{

try {

//todo some action 在这里添加代码,执行某个动作

//String strSendData = cmd;

//connectedThread.write(strSendData.getBytes());//接收数据

Thread.sleep(1000);//1秒发送一次

} catch (InterruptedException e) {

e.printStackTrace();

}

}else

{

break;//没有按下,退出循环

}

}

}

};

longPressSendCmdThread.start();

break;

}

case MotionEvent.ACTION_UP:{

longPress = false;

Toast.makeText(activity, "结束发送", Toast.LENGTH_SHORT).show();

}

}

}

执行的结果:

c2c6e201e41c0b7c316585952138904a.png

bfb64d5e67034e75c5e495824a799747.png

36a73671cb70451679f3e244f396a761.png

使用定时器实现JavaScript的延期执行或重复执行

使用定时器实现JavaScript的延期执行或重复执行 window 对象提供了两个方法来实现定时器的效果,分别是window.setTimeout()和 window.setInterval.其中前 ...

【Android 应用开发】Android - 按钮组件详解

总结了Android中常用的按钮用法 示例源码下载地址 : -- CSDN :  http://download.csdn.net/detail/han1202012/6852091 -- GitHu ...

Android - 按钮组件详解

总结了Android中常用的按钮用法 示例源码下载地址 : -- CSDN :  http://download.csdn.net/detail/han1202012/6852091 -- GitHu ...

JQuery脚本-通过禁用按钮防止表单重复提交

Celery异步任务重复执行(Redis as broker)

之前讲到利用celery异步处理一些耗时或者耗资源的任务,但是近来分析数据的时候发现一个奇怪的现象,即是某些数据重复了,自然想到是异步任务重复执行了. 查阅之后发现,到如果一个任务太耗时,任务完成时间 ...

【JavaScript】使用定时器实现Js的延期执行或重复执行setTimeout,setInterval

使用定时器实现JavaScript的延期执行或重复执行 window对象提供了两个方法来实现定时器的效果,分别是window.setTimeout()和window.setInterval.其中前者可 ...

remove name="ProxyModule“会导致重复执行

<?xml version="1.0" encoding="utf-8"?>

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值