Android 多次點(diǎn)擊事件的觸發(fā)方法

Android中經(jīng)常有自定義的點(diǎn)擊事件,但大多數(shù)都只是單擊或者長按事件.
本篇文章對于雙擊事件提供兩種方法:


老土的方法(自己以前的寫法)

long time_first = 0;
long time_second = 0;
long limit; //雙擊要求的間隔
public void doubleClick() {
    if (time_first != 0) {
        //已雙擊
        time_second = System.currentTimeMillis();
        long time = (time_second - time_first) / 1000;
        if (time <= limit) {
            //事件觸發(fā)

            //TODO
        } else {
            //時間過長,重新設(shè)定為單擊事件
            time_first = time_second;
        }
    } else {
        //單擊事件,記錄時間
        time_first = System.currentTimeMillis();
    }
}  

大致想法也就是判斷第一次和第二次的點(diǎn)擊事件時間, 然后計(jì)算是否符合雙擊的要求, balabala的. 乍一看是沒問題 , 可是遇到有些喪心病狂的需求(三擊, 四擊事件)的時候, 抱歉 TAT 我慫了, 用下面的方法吧.......

有點(diǎn)厲害的寫法(參照Android源碼)

long[] mHints=new long[3];//數(shù)組長度決定點(diǎn)擊事件的次數(shù)
long limit;
private void MultiClick(){
    System.arraycopy(mHints, 1, mHints, 0, mHints.length-1);
//相當(dāng)于數(shù)組的邏輯左移
   mHints[mHints.length-1]= SystemClock.uptimeMillis();
//將數(shù)組最后一位設(shè)置為當(dāng)前時鐘
   if (mHints[0]>=(SystemClock.uptimeMillis()-limit)) { 
//若0號元素距離系統(tǒng)末位元素的時間不到limit(設(shè)定的連擊時間觸發(fā)閾值)
       //三次點(diǎn)擊事件觸發(fā)事件
       //TODO
      }
}         

這種寫法就可以實(shí)現(xiàn)多次事件的點(diǎn)擊

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容