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

來源:互聯網
上載者:User

標籤:

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.