我有一个名为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不起作用,任何线索,无论如何,谢谢。
答案 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();
}