亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

檢查按鈕是否按住一段時間或是否只是單擊 ANDROID

檢查按鈕是否按住一段時間或是否只是單擊 ANDROID

弒天下 2022-12-28 16:52:34
我正在嘗試做一些非常簡單的事情,但由于某種原因我無法讓它工作。我有兩個圓形按鈕。- 當我只需單擊頂部(綠色)按鈕時,我希望按鈕切換顏色并保持這種狀態。- 如果我按住一個按鈕 2 秒鐘,我希望只要我按住按鈕,顏色就會交換,但一旦我松開,就會恢復到原來的顏色。我正在嘗試使用 OnClickListener。我在兩種情況下使用開關:MotionEvent.ACTION_DOWN 和 MotionEvent.ACTION_UP。(見下面的代碼)為了獲得按鈕被按住的持續時間,我在 while 循環中使用 System.currentTimeMillis() (當按鈕被按住時)-->(如果 timeElapsed > 2000){切換顏色}完整代碼如下: greenbutton.setOnTouchListener(new View.OnTouchListener() {        @Override        public boolean onTouch(View view, MotionEvent motionEvent) {            switch (motionEvent.getAction()) {                case MotionEvent.ACTION_DOWN:                    startTime = System.currentTimeMillis();                    while (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {                        currentTime = System.currentTimeMillis();                        elapsedTime = currentTime - startTime;                        if (elapsedTime > 500) {                            if (switched) {                                revertButtons();                                return true;                            } else {                                switchButtons();                                return true;                            }                        }                    }                case MotionEvent.ACTION_UP:                    if (switched) {                        revertButtons();                        elapsedTime = 0;                        currentTime = 0;                        startTime = 0;                        return true;                    } else {                        switchButtons();                        elapsedTime = 0;                        currentTime = 0;                        startTime = 0;                        return true;                    }            }            return false;        }    });
查看完整描述

2 回答

?
哆啦的時光機

TA貢獻1779條經驗 獲得超6個贊

嘗試使用預定義的方法 -

  1. onClickListener( () => {} )單擊

  2. onLongClickListener( () => {} )長時間點擊

這樣你就不需要計算用戶點擊的時間,并且通過運行循環或線程你可以在長時間點擊時不斷改變顏色。

更新

正如評論中提到的,它只需要一個特定的時間使用以下算法-

  1. 長按按鈕啟動計時器

  2. 2 秒后立即應用結果

** 更新**

由于需要點擊時間,請遵循:

  1. 在按鈕定義之前創建一個計時器

  2. 使用長按列表器啟動計時器

  3. 在停止計時器的動作上,您會得到結果


查看完整回答
反對 回復 2022-12-28
?
長風秋雁

TA貢獻1757條經驗 獲得超7個贊

我找到了一個簡單的解決方案來研究長按事件的工作原理。每次單擊視圖時,都會延遲Runnable將類型CheckForLongPress添加到隊列中。如果延遲結束,OnLongClickListener則調用。如果在延遲結束之前有不同的事件,則將CheckForLongPress Runnable其從隊列中移除。


我只是覆蓋postDelayed(Runnable action, long delayMillis)視圖的公共方法來更改操作系統延遲


@Override public boolean postDelayed(Runnable action, long delayMillis) {

    boolean isLongPress = action.getClass().getSimpleName().equals("CheckForLongPress");

    return super.postDelayed(action, isLongPress ? LONG_PRESS_MILLIS : delayMillis);

}

我設置LONG_PRESS_MILLIS為 100,它正在工作!


希望能幫助到你?。。?)


圖片來源: MArtinCR


查看完整回答
反對 回復 2022-12-28
  • 2 回答
  • 0 關注
  • 106 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號