点击次数的最佳方式是什么?并根据相应的点击次数播放声音

时间:2014-01-14 07:34:51

标签: java android eclipse

我有一个名为Gun的ImageView,如果我点击它,它将播放名为gunShot的Drawable Animation。

所以我声明了一个int

int gunCount = 0;

第一次单击Gun时,它会播放soundReload并将gunCount设置为1,因此它将永远不再播放soundReload。

然后点击它一次,它会播放声音A,点击两次,它会播放声音B,三次,声音C.

因此,每次点击它,它都会启动一个名为gunThread的线程,这个线程将检查点击次数并计算它,它会根据点击次数播放声音,之后它会重置int gunCount回到0,再次开始计数。

这是我的代码:

首先我声明了我的主题

final Thread Slash = new Thread(){
    public void run(){

        try{
            sleep(2000);

        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            if (gunCount == 3){
                gunShot.start();
                soundA.start();
                gunCount = 1;
            } else if (gunCount == 4){
                gunShot.start();
                soundB.start();
                gunCount = 1;
            } else if (gunCount == 5){
                gunShot.start();
                soundC.start();
                gunCount = 1;
            }       
        }

    }       
};    

然后这是onClick

Gun.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            if(gunThread.isAlive()){
                gunThread.stop();
            }

            if(gunShot.isRunning()){
                gunShot.stop();
            }

            if(gunCount == 0){
                gunShot.start();
                soundReload.start();
                gunCount = 1;

            } 

            else if(gunCount >= 1){
                sengokuState += 1;
                gunShot.start();
                gunThread.start();
            }

        }
    });

关键是,如果你同时点击它两次就会发出声音B. 点击它三次,它会播放soundC 点击一次,soundA将播放

第一次点击是soundReload

我设置了一个线程,所以它会等待用户输入睡眠中有多少gunCount(2000)。

有没有更好的方法呢?请告诉我,这似乎不太好用。 感谢。

这是编辑:     我插入这个最后的Thread playSound = new Thread(new Runnable(){

        @Override
        public void run() {
            //play the sound here with respect to clickCount
            if(clickCount == 2){
                soundA.start();
                clickCount = 2;
            }
            else if (clickCount == 3){
                soundB.start();
                clickCount = 2;
            }
            else if (clickCount == 4){
                soundC.start();
                clickCount = 2;
            }
        }
    });    

clickCount == 3并且clickCount == 4不起作用,任何线索,无论如何,谢谢。

2 个答案:

答案 0 :(得分:0)

在开始时有一个延迟似乎是一个很好的方法来做到这一点。如果不是,我用EarPods传递给下一首歌就不会有问题:)

编辑:

Handler handler = new Handler();
    Thread playSound = new Thread(new Runnable() {

        @Override
        public void run() {
            //play the sound here with respect to clickCount

        }
    });
    button.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            handler.removeCallbacks(playSound);
            handler.postDelayed(playSound, 2000);
            clickCount++;
        }
    });

答案 1 :(得分:0)

你应该考虑别的而不是线程尝试这个代码

private void CountDown() {

    CountDownTimer timer = new CountDownTimer(3000,1000) {

        @Override
        public void onTick(long millisUntilFinished) {


        }

        @Override
        public void onFinish() {


        }
    }.start();

}