有两种实现方法:
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
···
}
});