Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 计算点击次数的最佳方法是什么?并根据相应的点击次数播放声音_Java_Android_Eclipse - Fatal编程技术网

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

Java 计算点击次数的最佳方法是什么?并根据相应的点击次数播放声音,java,android,eclipse,Java,Android,Eclipse,我有一个名为Gun的ImageView,如果我点击它,它将播放名为gunShot的可绘制动画 所以我声明了一个int int gunCount = 0; 第一次单击“枪”时,它将播放soundReload并将枪数设置为1,因此它将不再播放soundReload 然后点击一次,它会播放soundA,点击两次,它会播放soundB,三次,soundC 所以每次我点击它,它都会启动一个名为gunThread的线程,这个线程会检查点击次数并计数,它会根据点击次数播放声音,然后它会将int guntco

我有一个名为Gun的ImageView,如果我点击它,它将播放名为gunShot的可绘制动画

所以我声明了一个int

int gunCount = 0;
第一次单击“枪”时,它将播放soundReload并将枪数设置为1,因此它将不再播放soundReload

然后点击一次,它会播放soundA,点击两次,它会播放soundB,三次,soundC

所以每次我点击它,它都会启动一个名为gunThread的线程,这个线程会检查点击次数并计数,它会根据点击次数播放声音,然后它会将int guntcount重置为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();
            }

        }
    });
关键是,如果你同时点击它两次,它就会播放soundB 单击三次,它将播放soundC 点击一下,soundA就会播放

第一次单击将是soundReload

我设置了一个线程,让它等待用户输入sleep2000中的枪械数量

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

以下是编辑: 我插入最后一个线程playSound=new Threadnew 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不起作用,没有任何线索,不管怎样,谢谢。

好的,在开始时有一个延迟似乎是一个好办法。如果没有,我就不会有问题用我的耳机传下一首歌:

编辑:


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

private void CountDown() {

    CountDownTimer timer = new CountDownTimer(3000,1000) {

        @Override
        public void onTick(long millisUntilFinished) {


        }

        @Override
        public void onFinish() {


        }
    }.start();

}

顺便说一句,我现在想到了,你可以用Handler来处理这个问题。每次你点击,你都可以延迟播放声音任务,比如2000毫秒。每次你再次点击,你就删除回调并再次延迟播放。这样你就可以计算你想不想点击的次数,并在最后2秒延迟后播放。你有没有改变使用处理程序更新代码?如果这样做了,请尝试在onClick方法中记录代码并打印clickCount,这样您就可以看到您有多少clickCount,您可能会错过延迟,并且当clickCount为2时它正在播放声音。顺便说一下,播放声音时需要将clickCount设置为0。将变量设为static和global它会解决你的问题静态整数枪数;我怎么做?为什么?
private void CountDown() {

    CountDownTimer timer = new CountDownTimer(3000,1000) {

        @Override
        public void onTick(long millisUntilFinished) {


        }

        @Override
        public void onFinish() {


        }
    }.start();

}