按钮的单击和多击事件

安卓中按钮的单击和多击事件

定义封装类:
public class MyClickListener {

    private View mView;
    private int mNum;
    private static int CLICK_TIME = 300;
    private List<Long> times = new ArrayList<>();
    private Handler mHandler = new Handler();
    private OnClickListener onClickListener;

    /**
     * @param num 设置触发连续点击事件的次数
     * @param view 需要被点击的view
     */
    public MyClickListener(int num, View view) {
        this.mNum = num;
        this.mView = view;
    }

    private void click() {
        mView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                times.add(SystemClock.uptimeMillis());
                int size = times.size();
                //处理多击事件
                if (size > 1) {
                    if (times.get(size - 1) - times.get(size - 2) < CLICK_TIME) {
                        if (onClickListener != null && size == mNum) {
                            onClickListener.onMultiClick();
                        }
                        if (mHandler != null) {
                            //如果连续点击生效,就移除前一个按钮的点击事件
                            mHandler.removeCallbacks(null);
                        }
                    } else {
                        long oldtime = times.get(size - 1);
                        times.clear();
                        //这里要添加最后一个时间,否则如果click......click.click的情况就会将前两个清掉,只剩一个的时候,就执行单机事件。
                        //所以保持最后一个时间,是为了与他后面的点击事件做衔接。
                        times.add(oldtime);
                    }
                }
                mHandler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        if (onClickListener != null) {
                            onClickListener.onSinleClick();
                        }
                    }
                }, CLICK_TIME);
            }
        });
    }

    public interface OnClickListener {
        void onSinleClick();

        void onMultiClick();
    }

    public void setOnClickListener(OnClickListener onClickListener) {
        this.onClickListener = onClickListener;
        click();
    }
}
使用:
new MyClickListener(2, view).setOnClickListener(new MyClickListener.OnClickListener() {
    @Override
    public void onSinleClick() {
        Toast.makeText(MainActivity.this, "singleClick", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onMultiClick() {
        Toast.makeText(MainActivity.this, "MultiClick", Toast.LENGTH_SHORT).show();
    }
});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值