2016-11-17 7 views
0

Я хочу реализовать кнопку на Android. Эта кнопка имеет две функции, одно нажатие на тост-сообщение, если пользователь мгновенно дважды нажимает кнопку в течение миллисекунды, тогда будет отображаться диалоговое окно предупреждения, если отсрочка будет нажата, чем будет отображаться сообщение тоста. Пожалуйста, дайте мне некоторое представление о том, как выполнять эти функции android Button.Дважды нажмите кнопку для функциональности на android

+0

Почему вы не можете использовать клик и длинный клик для этой кнопки ...? –

ответ

4

В вашей деятельности до OnCreate объявить

private long lastclicked = 0; 

затем setOnClickListener

button.setOnClickListener(new OnClickListener() { 
@Override 
public void onClick(View v) { 
    //1000 replace your time in ms 
    if (SystemClock.elapsedRealtime() - lastclicked < 1000){ 
     return; 
    } 
    lastclicked = SystemClock.elapsedRealtime(); 


    //perform here your task 

    } 
} 
0

Попробуйте это

Создать логическое перед тем OnCreate

private boolean pressedOnce = false; 

В onClickListener использовать обработчик для второго

button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 


       if (pressedOnce) { 
        // show the alert dialog 
       } 

       pressedOnce = true; 
       Toast.makeText(MainActivity.this, "Clicked once!", Toast.LENGTH_SHORT).show(); 

       new Handler().postDelayed(new Runnable() { 

        @Override 
        public void run() { 
         pressedOnce=false; 
        } 
       }, 1000); 
      } 
     }); 
0

Вы можете использовать CustomButton и реализует GestureDetector, тогда вы можете переопределить onSingleTapConfirmed и onDoubleTap Funciton

0

Альтернативой решений, представленных выше, является использование Android- предоставлено GestureDetector, что позволяет обнаруживать, среди прочих жестов, двойной кран.

Сначала вам нужен простой вложенный класс для обработки вашего двойного нажатия:

private class DoubleTapListener extends GestureDetector.SimpleOnGestureListener { 
    @Override 
    public boolean onDoubleTap(MotionEvent e) { 
     // Handle your double tap here. 

     return true; 
    } 
} 

GestureDetector «s интерфейсы слушателя по умолчанию позволяют слушать на многих различных сенсорных событиях. SimpleOnGestureListener обеспечивает пустую реализацию каждого из их методов, поэтому вы можете реализовать только те, которые вас интересуют.

Затем вам нужно создать свой GestureDetector. Вы можете сделать это в onCreate вашего Activity.

DoubleTapListener doubleTapListener = new DoubleTapListener(); 
GestureDetector gestureDetector = new GestureDetector(this, doubleTapListener); 
gestureDetector.setOnDoubleTapListener(doubleTapListener); 

К сожалению, вам нужно передать ваш doubleTapListener дважды - первый раз, когда он передается как OnGestureListener обеспечить все пустые реализации для методов, которые нас не интересуют. this представляет Context.

Последняя часть предназначена для маршрутизации вашего onTouchEvent на наш GestureDetector.

button.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View view, MotionEvent motionEvent) { 
     return gestureDetector.onTouchEvent(motionEvent); 
    } 
}); 

Это решение требует немного больше кода, но с другой стороны, вы полагаетесь на пути стандартного Android, чтобы обнаружить двойные отводы вместо того, чтобы создавать свои собственные.

Смежные вопросы