編輯:關於Android編程
最近在多擊事件上稍微研究了下,在此做簡要分析,供大家吐槽參考
方法一: 將兩次點擊的時間間隔小於0.5s的默認為雙擊事件
mBtn1.setOnTouchListener(new OnTouchListener() { @Override public 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; } });
當然上面的方法也可以在OnClickListener中實現
mBtn1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mLastTime = mCurTime; mCurTime = System.currentTimeMillis(); if (mCurTime - mLastTime < 500) { Toast.makeText(MainActivity.this, 這就是傳說中的雙擊事件, 1).show(); } } });
方法二:看了方法一,大家是不是覺得如果實現3擊事件的話會很麻煩,我也覺得會很麻煩,但大家不用擔心,下面實現的方法將教大家很容易的實現多擊事件
首先:實現雙擊事件
private long[] mHits = new long[2];
mBtn2.setOnClickListener(new OnClickListener() { @Override public 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(); } } });
SystemClock.uptimeMillis(); 系統時間,從cpu開啟時間就開始計時,不會出現自己設置時間導致程序跟隨系統時間出錯(如:有個程序,今天簽到得10積分,兩天後簽到得200積分,這是如果你設置系統時間為兩天後,如果程序不是使用上面的時間獲取方法,那麼他就會得到兩天後的積分,這樣作為程序開發者的我們就虧大了)
多擊實現:
private long[] mHits = new long[m];其余的代碼同上,只需更改new long[m]的值,你設m為幾,他就是幾次點擊事件
下面簡要分析下三擊事件的實現原理
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(拷貝的數據的個數)
上圖所畫是指三次間隔都成立(即成功)的情況下實現的三擊事件,當如果你前面點擊了兩次時間間隔短了,第三次卻明顯很長為3000ms,這時3000-500將不再小於1000,無法執行判斷中的語句if (mHits[0] >= (SystemClock.uptimeMillis() - 500)){執行不到 },這時你就必須重新開始連著點擊3次且時間間隔小於500ms,才能再次實現三擊事件
前言:在Android開發中,對於圖片的加載可以說是個老生常談的問題了,圖片加載是一個比較坑的地方,處理不好,會有各種奇怪的問題,比如 加載導致界面卡頓,程序crash。
android中,在進行耗時操作更新UI用到最多的方法就是Handler了,一般在子線程中進行耗時操作(訪問網絡等),然後發送消息到UI線程(主線程),使得界面得以更新。
前邊4篇文章,成功將 u-boot2012 移植到了 2440 開發板上,但是它僅僅支持 norflash 啟動並不夠完善,下面我們設法讓它支持兩種啟動方式。首先,我們得
Long Long ago...已經成為了歷史,我還是要說出一個真相:早年前,那時候,android還不被大眾所認知的時候,當然開發者也沒不像現在那樣趨於飽和狀態。一位大