webentwicklung-frage-antwort-db.com.de

Implementiere einen Doppelklick für die Schaltfläche in Android

Wie kann ich in Android einen Doppelklick für eine Schaltfläche implementieren? Soll ich OnDoubleTapListener verwenden?

14
Mathew

Dies ist eine gute Seite für Doppelklicks ... Ich habe es benutzt und gearbeitet.

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

Dies ist wahrscheinlich ein guter Startplatz:

Android: Wie kann man doppeltes Tippen erkennen?

Ich empfehle Ihnen, auf eine native Weise umzusteigen, z. B. langes Drücken (Antwort auf verknüpfte Frage) oder etwas kreativer (mit Multi-Touch), es sei denn, Sie sind auf die standardmäßige Doppelklickart von Windows angewiesen.

Möglicherweise haben Sie jedoch einen gültigen Grund - Doppelklick auf ist immerhin schneller als langes Drücken.

4
RichardTheKiwi

Ich habe dies geschrieben, um eine Toast-Nachricht mit einem Doppelklick in einer Kartenanwendung aufzurufen:

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

Erstellen Sie Ihren eigenen DoubleTapListener

Sie können einen DoubleTapListener erstellen, indem Sie View.OnClickListener übernehmen und ein Callback Ihres Listeners hinzufügen. 

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);

}

Und du bist fertig. Sie können diesen Listener in jeder Aktivität verwenden.

Wie verwende ich diesen DoubleClickListener in meiner Aktivität?

Implementieren Sie Callback in Ihrer Aktivität und überschreiben Sie die Methode.

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        
    }

}

Ein wichtiger Punkt ist die Verwendung dieses Konzepts. Sie können jede Art von Listener erstellen (Triple-Click-Listener). 

Relevante Links:

Siehe den vollständigen Arbeitscode HIER

0
Rohit Singh

Ich habe es benutzt und gearbeitet:

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");
    }
}

Es kommt von " https://elingwange.iteye.com/blog/1613177 "

0
Aaron