Android的连续点击事件的判断和响应。主要原理就是利用 有效连续点击总时间 = 连续点击次数 x 有效双击的最长时间间隔 / 2 ,利用数组拷贝左移来记录点击当时的系统时间,只要当前系统时间减去脚标为0的数组记录时间小于等于有效连续点击总时间,就算完成连续多次点击事件。
public class ViewHelper {
private WeakReference<View> weakReference;
public ViewHelper(View view){
weakReference = new WeakReference<>(view);
}
public void multiClick(int clickCount, final IActionCallback callback){
View view = weakReference.get();
if (view == null) return;
final long mHints[] = new long[clickCount];
// 连续点击总用时 = 连续点击次数 * 有效双击最长时间间隔/2
final long totalTime = clickCount * ViewConfiguration.getDoubleTapTimeout() / 2;
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//数组向左边移动一位
System.arraycopy(mHints, 1, mHints, 0, mHints.length - 1);
mHints[mHints.length-1] = SystemClock.uptimeMillis();
if (SystemClock.uptimeMillis() - mHints[0] <= totalTime){
callback.onComplete();
}
}
});
}
public interface IActionCallback{
void onComplete();
}
}