单击并双击android中的按钮

and*_*Dev 2 android button onclicklistener

在我的应用程序中,我有一个按钮.单击和双击按钮后将执行单独的操作.我怎样才能做到这一点?谢谢

Ray*_*old 8

您可能需要创建一个延迟变量,该变量将在单击和双击之间进行区分.

看到这段代码,

private static final long DOUBLE_PRESS_INTERVAL = 250; // in millis
private long lastPressTime;

private boolean mHasDoubleClicked = false;

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {    

        // Get current time in nano seconds.
        long pressTime = System.currentTimeMillis();


        // If double click...
        if (pressTime - lastPressTime <= DOUBLE_PRESS_INTERVAL) {
            Toast.makeText(getApplicationContext(), "Double Click Event", Toast.LENGTH_SHORT).show();
            mHasDoubleClicked = true;
        }
        else {     // If not double click....
            mHasDoubleClicked = false;
            Handler myHandler = new Handler() {
                 public void handleMessage(Message m) {
                      if (!mHasDoubleClicked) {
                            Toast.makeText(getApplicationContext(), "Single Click Event", Toast.LENGTH_SHORT).show();
                      }
                 }
            };
            Message m = new Message();
            myHandler.sendMessageDelayed(m,DOUBLE_PRESS_INTERVAL);
        }
        // record the last time the menu button was pressed.
        lastPressTime = pressTime;      
        return true;
    }
Run Code Online (Sandbox Code Playgroud)


sak*_*ham 8

那么它很简单只是覆盖。

OnClickListener 的 onClick 方法

public abstract class DoubleClickListener implements View.OnClickListener {
private static final long DEFAULT_QUALIFICATION_SPAN = 200;
private boolean isSingleEvent;
private long doubleClickQualificationSpanInMillis;
private long timestampLastClick;
private Handler handler;
private Runnable runnable;

public DoubleClickListener() {
    doubleClickQualificationSpanInMillis = DEFAULT_QUALIFICATION_SPAN;
    timestampLastClick = 0;
    handler = new Handler();
    runnable = new Runnable() {
        @Override
        public void run() {
            if (isSingleEvent) {
                onSingleClick();
            }
        }
    };
}

@Override
public void onClick(View v) {
    if((SystemClock.elapsedRealtime() - timestampLastClick) < doubleClickQualificationSpanInMillis) {
        isSingleEvent = false;
        handler.removeCallbacks(runnable);
        onDoubleClick();
        return;
    }

    isSingleEvent = true;
    handler.postDelayed(runnable, DEFAULT_QUALIFICATION_SPAN);
    timestampLastClick = SystemClock.elapsedRealtime();
}

public abstract void onDoubleClick();
public abstract void onSingleClick();
}
Run Code Online (Sandbox Code Playgroud)

用法

 button.setOnClickListener(new DoubleClickListener() {
        @Override
        public void onDoubleClick() {
            Log.i("onClick", "double");
        }

        @Override
        public void onSingleClick() {
            Log.i("onClick", "single");
        }
    });
Run Code Online (Sandbox Code Playgroud)


Hal*_*alR 5

您可能要考虑不使用DoubleTap。这不是正常的Android行为。

当我第一次在Android上开始编程时,我遇到了在Android上确实很难做到的事情。随着时间的流逝,我发现其中许多都是困难的,因为它们是一个非常糟糕的主意。

如果要移植iOS应用程序或模拟iOS应用程序的行为,则可能需要考虑将UI转换为Android样式的行为,并使用longPress或其他“ androidy”手势。

这是一个类似的问答:

Android:如何检测双击?