標籤:
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 按鈕長按下去重複執行某個動作,放開後停止執行動作