7

私のアプリケーションにはボタンがあります。ボタンをシングルクリックとダブルクリックすると、別々の操作が実行されます。どうやってやるの?ありがとう

4

10 に答える 10

9

シングルクリックとダブルクリックを区別する遅延変数を作成する必要がある場合があります。

このコードを参照してください、

private static final long DOUBLE_PRESS_INTERVAL = 250; // in millis
private long lastPressTime;

private boolean mHasDoubleClicked = false;

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {    

        // Get current time in nano seconds.
        long pressTime = System.currentTimeMillis();


        // If double click...
        if (pressTime - lastPressTime <= DOUBLE_PRESS_INTERVAL) {
            Toast.makeText(getApplicationContext(), "Double Click Event", Toast.LENGTH_SHORT).show();
            mHasDoubleClicked = true;
        }
        else {     // If not double click....
            mHasDoubleClicked = false;
            Handler myHandler = new Handler() {
                 public void handleMessage(Message m) {
                      if (!mHasDoubleClicked) {
                            Toast.makeText(getApplicationContext(), "Single Click Event", Toast.LENGTH_SHORT).show();
                      }
                 }
            };
            Message m = new Message();
            myHandler.sendMessageDelayed(m,DOUBLE_PRESS_INTERVAL);
        }
        // record the last time the menu button was pressed.
        lastPressTime = pressTime;      
        return true;
    }
于 2013-03-12T04:46:20.960 に答える
6

DoubleTap を使用しないことを検討することをお勧めします。これは通常の Android の動作ではありません。

私が初めて Android でプログラミングを始めたとき、Android では本当に「難しい」ことを繰り返していました。時間が経つにつれて、それらの多くは非常に悪いアイデアであるために困難であることがわかりました。

iOS アプリを移植する場合、または iOS アプリの動作をエミュレートする場合は、UI を Android スタイルの動作に変換し、longPress やその他の「androidy」ジェスチャを使用することを検討してください。

同様の質問と回答を次に示します。

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

于 2013-03-12T04:49:10.293 に答える
4

GestureDetectorを実装し、コードをに配置する必要がありますsingle/double click

TestActivity.java

iv.setOnClickListener(new OnClickListener() {           
                @Override
                public void onClick(View v) {
                    //putyour first activity call.
                }
    }

iv.setOnTouchListener(new OnTouchListener() {
             GestureDetector gestureDetector = new GestureDetector(context, new MyGestureDetector(context));
         @Override
         public boolean onTouch(View v, MotionEvent event) {
                return gestureDetector.onTouchEvent(event);
         }
});

GestureDetector.java次に、クラスを作成する必要があります。

public class MyGestureDetector extends SimpleOnGestureListener {
    public Context context;
    public String phno;

    public MyGestureDetector(Context con) {
        this.context=con;       
    }

    @Override
    public boolean onDown(MotionEvent e) {
        return super.onDown(e);
    }

    @Override
    public boolean onDoubleTap(MotionEvent e) {
        System.out.println("in Double tap");

        return true;
    }

    @Override
    public boolean onSingleTapUp(MotionEvent e) {
        System.out.println("in single tap up");
            //put your second activity.
        return super.onSingleTapUp(e);
    }   
}
于 2013-03-12T04:47:09.027 に答える
3

@NikolaDespotskiに感謝します。

DOUBLE-TAP の は、以下のURLから確認できます。それはlistViewで使用されます。お役に立てば幸いです。

https://nodeload.github.com/NikolaDespotoski/DoubleTapListView/zip/master

于 2013-03-12T10:30:27.700 に答える
-2

私も一度同じ問題が発生しました

setOnClickListener(new OnClickListener() {           
            @Override
            public void onClick(View v) {
                if(isFmOn()){
                   //stopFM
                }else{
                  //do other things
                }
            }
}

ボタンをクリックするとFMが止まり、ダブルクリックしてもFMが止まりませんでした。私はこれを使って問題を解決しました:

setOnClickListener(new OnClickListener() {           
            @Override
            public void onClick(View v) {
                Thread.sleep(500);//500ms was enough to finish stopFM before the second click
                if(isFmOn()){
                   //stopFM
                }else{
                  //do other things
                }
            }
}
于 2013-05-15T08:07:28.713 に答える