Android 按鈕長按下去重復執行某個動作,放開后停止執行動作


  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);
                                      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(); } } }

 

  執行的結果:

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM