开发过程中经常遇到View需要多次点击才能出发的事件监听,刚好项目需要使用到5次点击才能触发的事件,就简单封装了一个工具类。以备下次使用:
如有问题,请留言反馈,以及时修改
先看使用
方式一
MultipleClickUtils.setMultipleClick( textView, new MultipleClickUtils.OnMultipleClickListener() {
@Override
public void onClick(View v, int clickTimes) {
Log.d("MultipleClickUtils", "点击第" + clickTimes + "次");
}
@Override
public void onMultipleClick(View v) {
Log.d("MultipleClickUtils", "点击目标次数");
}
});
方式二、
自定义点击次数(默认5次) 和 间隔时间(500毫秒):
// 设置 目标次数 3 次 ,每次最大间隔 300毫秒
MultipleClickUtils.setMultipleClick(mSIVMineAvatar,3,300,new MultipleClickUtils.SimpleMultipleClick(){
@Override
public void onMultipleClick(View v) {
super.onMultipleClick(v);
Log.d("MultipleClickUtils", "点击目标次数");
}
});
工具类源码
/**
* Created By : fumm
* DATE : 2019/7/18 9:38
* Describe : 自定义多次点击效果
**/
public class MultipleClickUtils {
/**
* 已点击次数
*/
private static int mTimeCount = 1;
/**
* 目标点击次数
*/
private static int mGoalTime = 5;
/**
* 点击间隔时间
*/
private static long mMaxIntervalTime = 500;
/**
* 上次点击时间
*/
private static long mLastTime = 0;
/**
* 点击监听
*/
private static OnMultipleClickListener mMultipleClickListener;
public static void setMultipleClick(View view, OnMultipleClickListener multipleClickListener){
setMultipleClick(view,mGoalTime,multipleClickListener);
}
public static void setMultipleClick(View view, int goalTime, OnMultipleClickListener multipleClickListener) {
setMultipleClick(view, goalTime, mMaxIntervalTime, multipleClickListener);
}
private static void setMultipleClick(View view, int goalTime, long intervalTime, OnMultipleClickListener multipleClickListener) {
mMultipleClickListener = multipleClickListener;
mGoalTime = goalTime;
mMaxIntervalTime = intervalTime;
if (multipleClickListener == null) {
Log.e("MultipleClickUtils", "OnMultipleClickListener is null !!!");
return;
}
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
long currentTime = System.currentTimeMillis();
long intervalTime = currentTime - mLastTime;
if (intervalTime <= mMaxIntervalTime) {
mTimeCount++;
} else {
resetTimes();
}
mLastTime = currentTime;
if (mTimeCount == mGoalTime) {
mMultipleClickListener.onMultipleClick(v);
resetTimes();
} else {
mMultipleClickListener.onClick(v, mTimeCount);
}
}
});
}
/**
* 重置点击次数
*/
private static void resetTimes() {
mTimeCount = 1;
}
public static class SimpleMultipleClick implements OnMultipleClickListener{
@Override
public void onClick(View v, int clickTimes) {
}
@Override
public void onMultipleClick(View v) {
}
}
public interface OnMultipleClickListener {
/**
* 点击回调
*
* @param v v
* @param clickTimes clickTimes
*/
void onClick(View v, int clickTimes);
/**
* 点击目标次数
*
* @param v v
*/
void onMultipleClick(View v);
}
}