美文网首页
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