web-dev-qa-db-ja.com

Androidにボタンのダブルクリックを実装します

Androidでボタンのダブルクリックを実装するにはどうすればよいですか? OnDoubleTapListenerを使用する必要がありますか?

15
Anju

これはダブルクリックを実行するのに適したサイトです...私はそれを使用して作業しました。

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

3
Anju
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

これはおそらく開始するのに適した場所です。

Android:ダブルタップを検出する方法?

Windowsのデフォルトのダブルクリックの方法にこだわらない限り、長押し(リンクされた質問に答える)などのよりネイティブな方法、または(マルチタッチを使用する)より創造的な方法に切り替えることをお勧めします。

ただし、正当な理由がある可能性があります。ダブルクリック結局、長押しよりも高速です。

4
RichardTheKiwi

これは、マッピングアプリケーションでダブルクリックでToastメッセージをポップアップするために作成しました。

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

                }
2
mr.bug

独自のDoubleTapListenerを作成する

View.OnClickListenerを継承し、リスナーのCallbackを追加して、DoubleTapListenerを作成できます。

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

}

これで完了です。このリスナーは、どのアクティビティでも使用できます。

このDoubleClickListenerをアクティビティで使用するにはどうすればよいですか?

アクティビティにコールバックを実装し、メソッドをオーバーライドします。

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        
    }

}

重要な点は、この概念を使用して、あらゆる種類のリスナー(トリプルクリックリスナー)を作成できることです。

関連リンク:

完全な動作コードを見る [〜#〜]ここ[〜#〜]

0
Rohit Singh

私はそれを使って働きました:

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

https://elingwange.iteye.com/blog/1613177 "

0
Aaron