2

Button当我按住它 3 秒钟时,我需要更改布局,但是当我快速按下一次时,它应该只是播放声音。

在下面的代码中,无论如何都会发出声音(因为在这种情况下没关系)。

我的问题是它只会在您第一次使用时更改页面,Button无论是按住(更改布局)还是短按(仅播放声音)。因此,如果我按住按钮并更改布局,但然后我返回它不会再次工作。此外,如果使用短按来播放声音,我无法按住按钮来更改布局。

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? 当 aView被单击并保持一小会儿时调用它。对于其他情况,您可以使用一个简单的OnClickListener,在按下时调用。

更多信息在这里:http: //developer.android.com/reference/android/view/View.OnLongClickListener.html

于 2012-08-13T22:47:24.850 回答
1

你的方法是完全错误的(当然是国际海事组织)。

除了使用 aThread来跟踪时间,您还可以使用System.currentTimeMillis().

另外,我建议您对该onTouch()方法进行一些阅读,以便更好地了解它的工作原理。尤其是MotionEvent事件。

于 2012-08-13T22:37:43.493 回答