美文网首页
ClickUtil 实现连续点击多次事件

ClickUtil 实现连续点击多次事件

作者: 颤抖的闪电 | 来源:发表于2019-08-16 15:55 被阅读0次

有时候我们需要实现这样的场景,类似进入开发者模式,即多次点击后执行操作。

思路:首先我们点击的时候都将数组向左移动一位,将时间赋值给最后一位,从上面的代码中我们可以看出当我们点击了四次,那么最后一位就已经被移到了第一位,然后我们比较时间:
首先我们先看一个方法:

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();
        }

感谢:
Android实现连续点击多次事件的代码详解

相关文章

网友评论

      本文标题:ClickUtil 实现连续点击多次事件

      本文链接:https://www.haomeiwen.com/subject/gxkqsctx.html