web-dev-qa-db-fra.com

Implémenter un double clic pour le bouton dans Android

Comment implémenter le double-clic d'un bouton dans Android? Devrais-je utiliser OnDoubleTapListener?

14
Mathew

C'est un bon site pour effectuer un double clic ... Je l'ai utilisé et travaillé.

http://mobile.tutsplus.com/tutorials/Android/android-gesture/

3
Mathew
int i = 0;
btn.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        i++;
        Handler handler = new Handler();
        Runnable r = new Runnable() {

            @Override
            public void run() {
                i = 0;
            }
        };

        if (i == 1) {
            //Single click
            handler.postDelayed(r, 250);
        } else if (i == 2) {
            //Double click
            i = 0;
            ShowDailog();
        }


    }
});
29
Parag Chauhan

C'est probablement un bon endroit pour commencer:

Android: Comment détecter un double tap?

Je recommande de passer à une méthode plus native, comme appuyer longuement (répondre à une question liée) ou à une méthode plus créative (utilisation du multi-touch), à moins que vous ne vouliez utiliser le double-clic par défaut de Windows.

Vous pouvez avoir une raison valable cependant - un double clic sur est après tout plus rapide qu'un appui long.

4
RichardTheKiwi

J'ai écrit ceci pour faire apparaître un message Toast lors d'un double clic dans une application cartographique:

private long lastTouchTime = -1;

@Override
public boolean onTouchEvent(MotionEvent e, MapView mapView) {

   GeoPoint p = null;

   if (e.getAction() == MotionEvent.ACTION_DOWN) {

      long thisTime = System.currentTimeMillis();
      if (thisTime - lastTouchTime < 250) {

         // Double click
         p = mapView.getProjection().fromPixels((int) e.getX(), (int) e.getY());
         lastTouchTime = -1;

      } else {
         // too slow
         lastTouchTime = thisTime;
      }
   }
   if (p != null) {
      showClickedLocation(p);// Raise a Toast
   }
   return false;
}
3
NickT
private long lastTouchTime = 0;
private long currentTouchTime = 0;

..

         @Override
                public void onClick(View view) {

                    lastTouchTime = currentTouchTime;
                    currentTouchTime = System.currentTimeMillis();

                    if (currentTouchTime - lastTouchTime < 250) {
                        Log.d("Duble","Click");
                        lastTouchTime = 0;
                        currentTouchTime = 0;
                    }

                }
1
mr.bug

Créez votre propre DoubleTapListener

Vous pouvez créer un DoubleTapListener en héritant de View.OnClickListener et en ajoutant un Callback de votre écouteur. 

MyDoubleClickListener.class

public class MyDoubleClickListener implements View.OnClickListener{

    private boolean isRunning= false;
    private int resetInTime =500;
    private int counter=0;

    private DoubleClickCallback listener;

    public DoubleTapListener(Context context)
    {
      listener = (DoubleClickCallback)context;             
    }

    @Override
    public void onClick(View v) {

       if(isRunning)
       {
          if(counter==1) //<-- makes sure that the callback is triggered on double click
          listener.onDoubleClick(v);
       }

       counter++;

       if(!isRunning)
       {
          isRunning=true;
          new Thread(new Runnable() {
              @Override
              public void run() {
                 try {
                    Thread.sleep(resetInTime);
                    isRunning = false;
                    counter=0;
                 } catch (InterruptedException e) {
                  e.printStackTrace();
                 }
              }
          }).start();
       }

    }

}

DoubleClickCallback.class

public interface DoubleClickCallback {

   public void onDoubleClick(View v);

}

Et vous avez terminé. Vous pouvez utiliser cet écouteur dans n'importe quelle activité.

Comment utiliser ce DoubleClickListener dans mon activité?

Implémentez le rappel dans votre activité et remplacez la méthode.

public class MainActivity extends AppCompatActivity implements MyDoubleClickListener{

    private Button button;       

    @Override
    protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);

         button   = (Button)findViewById(R.id.button);    
         button.setOnClickListener(new DoubleTapListener(this));  //<-- Set listener

    }

    @Override
    public void onDoubleClick(View v) {
          // Toast to show double click        
    }

}

Le point important est l'utilisation de ce concept, vous pouvez créer n'importe quel type d'écouteur (écouteur à triple clic) 

Liens pertinents:

Voir le code de travail complet ICI

0
Rohit Singh

Je l'ai utilisé et travaillé:

public class DoubleClickTest extends Activity {
    String TAG = "DoubleOrSingleClickTest";
    private boolean waitDouble = true;
    private static final int DOUBLE_CLICK_TIME = 350; // double click timer

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.double_click_test);
        Button button = (Button) findViewById(R.id.buttonDoubleOrSingleClicked);
        button.setOnClickListener(listenerDoubleOrSingle);
    }

    View.OnClickListener listenerDoubleOrSingle = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (waitDouble == true) {
                waitDouble = false;
                Thread thread = new Thread() {
                    @Override
                    public void run() {
                        try {
                            sleep(DOUBLE_CLICK_TIME);
                            if (waitDouble == false) {
                                waitDouble = true;
                                singleClick();
                            }
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                };
                thread.start();
            } else {
                waitDouble = true;
                doubleClick();
            }
        }
    };
    // single event
    private void singleClick() {
        Log.i(TAG, "singleClick");
    }
    // double event
    private void doubleClick() {
        Log.i(TAG, "doubleClick");
    }
}

Cela vient de " https://elingwange.iteye.com/blog/1613177 "

0
Aaron