安卓中按钮的单击和多击事件
定义封装类:
public class MyClickListener {
private View mView;
private int mNum;
private static int CLICK_TIME = 300 ;
private List<Long> times = new ArrayList<>();
private Handler mHandler = new Handler();
private OnClickListener onClickListener;
/**
* @param num 设置触发连续点击事件的次数
* @param view 需要被点击的view
*/
public MyClickListener (int num, View view) {
this .mNum = num;
this .mView = view;
}
private void click () {
mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick (View v) {
times.add(SystemClock.uptimeMillis());
int size = times.size();
if (size > 1 ) {
if (times.get(size - 1 ) - times.get(size - 2 ) < CLICK_TIME) {
if (onClickListener != null && size == mNum) {
onClickListener.onMultiClick();
}
if (mHandler != null ) {
mHandler.removeCallbacks(null );
}
} else {
long oldtime = times.get(size - 1 );
times.clear();
times.add(oldtime);
}
}
mHandler.postDelayed(new Runnable() {
@Override
public void run () {
if (onClickListener != null ) {
onClickListener.onSinleClick();
}
}
}, CLICK_TIME);
}
});
}
public interface OnClickListener {
void onSinleClick();
void onMultiClick();
}
public void setOnClickListener (OnClickListener onClickListener) {
this .onClickListener = onClickListener;
click();
}
}
使用:
new MyClickListener(2 , view).setOnClickListener(new MyClickListener.OnClickListener() {
@Override
public void onSinleClick () {
Toast.makeText(MainActivity.this , "singleClick" , Toast.LENGTH_SHORT).show();
}
@Override
public void onMultiClick () {
Toast.makeText(MainActivity.this , "MultiClick" , Toast.LENGTH_SHORT).show();
}
});