如何正确设置自定义长按监听器?

时间:2015-05-11 20:12:03

标签: java android ontouchlistener

我正在尝试在解锁按钮上设置我自己的长按侦听器。每当我按下解锁按钮时,它会总结持续时间,我可以解锁永久点击。

Unlock.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(final View v, MotionEvent event) {
                    if (event.getAction() == MotionEvent.ACTION_DOWN) {
                        Unlock.setText("Press to unlock");
                        isLongPress = true;
                        Handler handler = new Handler();
                        handler.postDelayed(new Runnable() {
                            @Override
                            public void run() {
                                if (isLongPress) {
                                    Unlock();
                                }
                            }
                        }, longClickDuration); //amount of time of long click
                    } else if (event.getAction() == MotionEvent.ACTION_UP) {
                        Unlock.setText("Unlock");
                        isLongPress = false;
                    }
                    return true;
                }
            });
        }catch (Exception e) {
            // TODO: handle exception
        }
    }

1 个答案:

答案 0 :(得分:0)

如果您只想处理长时间点击,请考虑使用以下代码:

        Unlock.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                your code
            }
        });

但是如果在某个(可自定义的)时间之后调用Unlock();,则应该在MotionEvent.ACTION_UP处理程序中测量此时间。正如@Attaullah Khan所说,使用SystemClock.elapsedRealtime()系统计时器在两个时刻(按下并释放按钮时)正确计算毫秒数,如果时间大于longClickDuration,则调用Unlock

您在handler.postDelayed处理程序中调用的MotionEvent.ACTION_DOWN只会在longClickDuration间隔后调用按下状态,如果您的按钮在此时突然被按下,则验证通过正确