有兩種實現方法:
1、通過view事件的傳遞機制,如果是連續點擊,則攔截目標的點擊事件
@Override public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { if (isFastDoubleClick()) { return true; } } return super.dispatchTouchEvent(ev); } long lastClickTime; public boolean isFastDoubleClick() { long time = System.currentTimeMillis(); long timeD = time - lastClickTime; if ( 0 < timeD && timeD < 500) { return true; } lastClickTime = time;
return false;}
2、只要在xml文件中的父容器總加入這樣一行代碼即可: android:splitMotionEvents=”false” 如在下面的LinearLayout中加入這行話,表示每一次只能點擊LinearLayout其中的一個元素,點擊了其他的元素是無效的。 android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="@dimen/dp10" android:splitMotionEvents="false" android:background="@drawable/shape_frame_black" android:orientation="vertical" > 防止點擊一個控件多次 這個我們只要加上一個標誌位就可以了,判斷前後2次的點擊時間間隔是否大於一個固定值,這個固定值可以我們自己定義。
3、定義抽象類,實現OnClickListener
public abstract class OnSingleClickListener implements OnClickListener { private long preTime ; private int delaySecond = 500 ; // 默認兩次點擊的間隔爲 500 毫秒 public OnSingleClickListener(){ super() ; } /** * 可設置兩次點擊的間隔時間 * @param delaySecond 兩次點擊的間隔時間,單位 毫秒 */ public OnSingleClickListener(int delaySecond){ this() ; this.delaySecond = delaySecond ; } @Override public void onClick(View view) { // TODO Auto-generated method stub if(!isDoubleClick()){ onSingleClick(view) ; } } /** * 用於爲外部提供的覆寫方法,以實現點擊事件 */ protected abstract void onSingleClick(View view) ; /** * 判斷是否是連續點擊了Button * @return * true 連續點擊了Button * false 沒有連續點擊Button */ private boolean isDoubleClick(){ long lastTime = System.currentTimeMillis() ; boolean flag = lastTime - preTime < delaySecond ? true : false ; preTime = lastTime ; return flag ; } }
使用方法和 OnClickListener 一樣,如:
button.setOnClickListener(new OnSingleClickListener([int delaySecond]) {
@Override
protected void onSingleClick(View view) {
// TODO Auto-generated method stub
···
}
});