50、Android View 自定义多次点击回调工具类

开发过程中经常遇到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);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值