有时候我们需要实现这样的场景,类似进入开发者模式,即多次点击后执行操作。
思路:首先我们点击的时候都将数组向左移动一位,将时间赋值给最后一位,从上面的代码中我们可以看出当我们点击了四次,那么最后一位就已经被移到了第一位,然后我们比较时间:
首先我们先看一个方法:
System提供的一个静态方法arraycopy(),我们可以使用它来实现数组之间的复制。
static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length);
src:源数组;
srcPos:源数组要复制的起始位置;
dest:目的数组;
destPos:目的数组放置的起始位置;
length:复制的长度。
工具类如下:
import android.os.SystemClock;
public class ClickUtil {
final static int COUNTS = 6;// 点击次数
final static long DURATION = 1000;// 规定有效时间
static long[] mHits = new long[COUNTS];
public static void continuousClick(int count, long duration, IListener listener) {
//每次点击时,数组向前移动一位
System.arraycopy(mHits, 1, mHits, 0, mHits.length - 1);
//为数组最后一位赋值
mHits[mHits.length - 1] = SystemClock.uptimeMillis();
if (mHits[0] >= (SystemClock.uptimeMillis() - duration)) {
mHits = new long[count];//重新初始化数组
// Toast.makeText(EnContext.get(), "连续点击了4次", Toast.LENGTH_LONG).show();
listener.onClick();
}
}
public interface IListener {
void onClick();
}
}
使用方法如:
login_bottom_tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ClickUtil.continuousClick(6, 1500, new ClickUtil.IListener() {
@Override
public void onClick() {
showSingleAlertDialog(v);
}
});
}
});
private AlertDialog mSingleAlertDialog; //单选框
int checkedItem = 0;
public void showSingleAlertDialog(View view) {
final String[] items = {"生产版", "测试版"};
AlertDialog.Builder alertBuilder = new AlertDialog.Builder(getActivity());
alertBuilder.setCancelable(false);
alertBuilder.setTitle("选择接口环境");
alertBuilder.setSingleChoiceItems(items, MConfig.IS_DEBUG ? 1 : 0, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
checkedItem = i;
}
});
alertBuilder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
getSharedPreferences("dev_env_file", Context.MODE_PRIVATE).edit()
.putBoolean("is_debug", checkedItem != 0)
.apply();
mSingleAlertDialog.dismiss();
finishAffinity();
android.os.Process.killProcess(android.os.Process.myPid());
}
});
alertBuilder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
mSingleAlertDialog.dismiss();
}
});
mSingleAlertDialog = alertBuilder.create();
mSingleAlertDialog.show();
}