Как обнаружить событие двойного щелчка для кнопок в Android

Что у меня есть: у меня есть набор кнопок в горизонтальной прокрутки

Что я хочу: я хочу обнаружить событие при двойном нажатии на кнопку

Примечание. Обычно я работаю с событиями кликов, используя class implements Onclicklistener, Но теперь, как я могу добиться того же для двойных кликов. будет полезно, если есть какой-либо интерфейс, который я могу использовать для этой цели


КОД:

<HorizontalScrollView
        android:id="@+id/horizontalScrollView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal" >

            <Button
                android:id="@+id/button1"
                android:layout_width="200dp"
                android:layout_height="150dp"
                android:text="Song1" />

            <Button
                android:id="@+id/button2"
                android:layout_width="200dp"
                android:layout_height="150dp"
                android:text="Song2" />

            <Button
                android:id="@+id/button3"
                android:layout_width="200dp"
                android:layout_height="150dp"
                android:text="Song3" />
        </LinearLayout>
    </HorizontalScrollView>

4 ответа

Решение

Здесь отличный ответ:

Один щелчок и двойной щелчок кнопки в Android

Тем не менее, я предлагаю использовать событие OnLongPress, которое рекомендуется Google.

Посмотреть этот API здесь:

http://developer.android.com/reference/android/view/View.OnLongClickListener.html

ура

Вот что работает для меня,

Примечание: он будет работать только для двойного щелчка, он не может обрабатывать действия одного щелчка и двойного щелчка отдельно

// Define 2 global class variables
private static long LAST_CLICK_TIME = 0;
private final int mDoubleClickInterval = 400; // Milliseconds

// Then, inside onClick method of Button
long doubleClickCurrentTime = System.currentTimeMillis();
long currentClickTime = System.currentTimeMillis();
if (currentClickTime - LAST_CLICK_TIME <= mDoubleClickInterval)
{
    Toast.makeText(this, "Double click detected", Toast.LENGTH_SHORT).show();
}
else
{
    LAST_CLICK_TIME = System.currentTimeMillis();
    // !Warning, Single click action problem
}
      private int buttonClick = 0;
private void fabVisibility () {
    fabOpen.setOnClickListener (v -> {
        if (buttonClick == 0){
            buttonClick = 2;
            overridePendingTransition (R.anim.fade_in, R.anim.fade_out);
            scanFab.setVisibility (View.VISIBLE);
            historyFab.setVisibility (View.VISIBLE);
        }else if (buttonClick == 2){
            buttonClick = 0;
            overridePendingTransition (R.anim.fade_in, R.anim.fade_out);
            scanFab.setVisibility (View.GONE);
            historyFab.setVisibility (View.GONE);
        }
    });
}

Я использую это соло:

    var doubleTap = false
    your_button.setOnClickListener {
        if (doubleTap)
            handleClick(it.context)
        doubleTap = true
        Handler(Looper.getMainLooper()).postDelayed({
            doubleTap = false
        }, 1500)
    }

вы можете использовать этот трюк в onBackPress Activity для выхода из приложения на шаге буксировки.

Удачи

Другие вопросы по тегам