android實現雙擊事件暨多擊事件詳解

來源:互聯網
上載者:User

標籤:android   雙擊事件 多擊事件   

最近在多擊事件上稍微研究了下,在此做簡要分析,供大家吐槽參考

方法一: 將兩次點擊的時間間隔小於0.5s的預設為雙擊事件

<span style="font-family:SimSun;font-size:14px;">mBtn1.setOnTouchListener(new OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:mLastTime = mCurTime;mCurTime = System.currentTimeMillis();if (mCurTime - mLastTime < 500) {Toast.makeText(MainActivity.this, "這就是傳說中的雙擊事件", 1).show();return true;}break;default:break;}return false;}});</span>


當然上面的方法也可以在OnClickListener中實現

<span style="font-family:SimSun;font-size:14px;">mBtn1.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {mLastTime = mCurTime;mCurTime = System.currentTimeMillis();if (mCurTime - mLastTime < 500) {Toast.makeText(MainActivity.this, "這就是傳說中的雙擊事件", 1).show();}}});</span>

方法二:看了方法一,大家是不是覺得如果實現3擊事件的話會很麻煩,我也覺得會很麻煩,但大家不用擔心,下面實現的方法將教大家很容易的實現多擊事件

首先:實現雙擊事件

<span style="font-family:SimSun;font-size:14px;">private long[] mHits = new long[2];</span>

<span style="font-family:SimSun;font-size:14px;">mBtn2.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {System.out.println("" + mHits.length);System.arraycopy(mHits, 1, mHits, 0, mHits.length - 1);mHits[mHits.length - 1] = SystemClock.uptimeMillis(); // 系統開機時間if (mHits[0] >= (SystemClock.uptimeMillis() - 500)) {Toast.makeText(MainActivity.this, "這就是傳說中的雙擊事件", 1).show();}}});</span>

SystemClock.uptimeMillis();  系統時間,從cpu開啟時間就開始計時,不會出現自己設定時間導致程式跟隨系統時間出錯(如:有個程式,今天簽到得10積分,兩天后簽到得200積分,這是如果你設定系統時間為兩天后,如果程式不是使用上面的時間擷取方法,那麼他就會得到兩天后的積分,這樣作為程式開發人員的我們就虧大了)

多擊實現:

<span style="font-family:SimSun;font-size:14px;">private long[] mHits = new long[m];</span>
其餘的代碼同上,只需更改new long[m]的值,你設m為幾,他就是幾次點擊事件


下面簡要分析下三擊事件的實現原理

<span style="font-family:SimSun;font-size:14px;">    System.arraycopy(src, srcPos, dst, dstPos, length)   //系統拷貝數組的api    src:the source array to copy the content(拷貝的源數組)    srcPos:the starting index of the content in src(從源數組的哪個位置開始拷貝)    dst:the destination array to copy the data into(目標數組)    dstPos:the starting index for the copied content in dst(從目標數組的哪個位置開始寫資料)    length:the number of elements to be copied(拷貝的資料的個數)</span>


所畫是指三次間隔都成立(即成功)的情況下實現的三擊事件,當如果你前面點擊了兩次時間間隔短了,第三次卻明顯很長為3000ms,這時3000-500將不再小於1000,無法執行判斷中的語句if (mHits[0] >= (SystemClock.uptimeMillis() - 500)){執行不到 },這時你就必須重新開始連著點擊3次且時間間隔小於500ms,才能再次實現三擊事件


轉載請標明出處,謝謝

http://blog.csdn.net/wei18359100306/article/details/40687381












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.