标签:
Android开发中,常遇到一种需求,即按钮长按下去重复执行某个动作,放开后停止执行动作。网上找了许多代码,都没有适合的,于是自己动手写了一个。
基本思路是:首先设置一个标识变量,用于标识是否处于按下的状态。当按钮按下的时候,将标识变量设置为true,启动一个线程用于重复执行某个动作(当标识变量为true时,循环执行动作,当为false跳出循环,结束动作);当按钮弹起来的时候,将标识变量设置为false。
1、首先,设置标识变量
1 private boolean booleanConnect = false; 2 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); sendData.setText(""); return false; } } ); }
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(); } } }
执行的结果:
Android 按钮长按下去重复执行某个动作,放开后停止执行动作
标签:
原文地址:http://www.cnblogs.com/cv-pr/p/4764879.html