2

3秒間押し続けるとレイアウトを変更する必要がありButtonますが、1回すばやく押すと音が鳴るだけです。

以下のコードでは、何があっても音が出ます(この場合は問題ないため)。

私の問題は、ページを押したままにする(レイアウトを変更する)か、短くクリックする(サウンドを再生するだけ)かに関係なく、最初にページを変更するだけであるということです。Buttonしたがって、ボタンを押したままレイアウトを変更しても、元に戻すと、2回目は機能しません。また、短いタッチでサウンドを再生すると、ボタンを押したままにしてレイアウトを変更することができません。

final Button b1pad1 = (Button) findViewById(R.id.b1pad1);
b1pad1.setOnTouchListener(new View.OnTouchListener() {

    public boolean onTouch(View v, final MotionEvent event) {
        // TODO Auto-generated method stub
        switch(event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            MediaPlayer mp = MediaPlayer.create(PhotosActivity.this, R.raw.sub);
            mp.start();
            holdTimer = new Thread() {
                public void run() {
                    try {
                        int timer = 0;
                        while (timer<3000) {
                            sleep(100); 
                            if (event.getAction() == MotionEvent.ACTION_UP) { 
                                //checks whether you lifted your finger before 
                                //the 3 seconds.
                                breaked = "no"; 
                                //"no" means "don't change layout"
                                changetobrowser(b1pad1, breaked);
                                break;    
                            }
                            timer = timer + 100;
                        }
                        if (breaked.equals("")){
                            breaked = "go"; //go means "change the layout"
                            changetobrowser(b1pad1,breaked);
                        }
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            };

            holdTimer.start();
            break;

        case MotionEvent.ACTION_UP:
            // End
            break;
        }

        return false;
    }
});

public void  changetobrowser(Button but, String breaked) {
    if (breaked.equals("go")){
        Intent browseIntent = new Intent(PhotosActivity.this, BrowseScreen.class);
        startActivity(browseIntent); 
    } else {
    }
}

問題は何でしょうか?そして、これはそれを行う最も簡単な方法ですか?

4

2 に答える 2

2

使用を検討しましたOnLongClickListenerか?Viewがクリックされてしばらく押し続けられたときに呼び出されます。その他の場合は、OnClickListenerを押すと呼び出される単純なを使用できます。

詳細はこちら:http ://developer.android.com/reference/android/view/View.OnLongClickListener.html

于 2012-08-13T22:47:24.850 に答える
1

あなたのアプローチは完全に間違っています(もちろんIMO)。

Threadを使用して時間を追跡する代わりに、を使用できますSystem.currentTimeMillis()

また、メソッドを読んで、onTouch()それがどのように機能するかをよりよく理解できるようにすることをお勧めします。特にMotionEventイベント。

于 2012-08-13T22:37:43.493 に答える