Android 单击后按钮保持按下状态,直到方法结束
我想使用相同的按钮启动和停止播放一些带有for循环的函数play()的声音。 我本想使用lock变量来实现这一点,但单击后的按钮一直保持按下状态,直到函数play end执行为止。 你能提出一些解决办法吗 我的情况是这样的:Android 单击后按钮保持按下状态,直到方法结束,android,button,soundpool,Android,Button,Soundpool,我想使用相同的按钮启动和停止播放一些带有for循环的函数play()的声音。 我本想使用lock变量来实现这一点,但单击后的按钮一直保持按下状态,直到函数play end执行为止。 你能提出一些解决办法吗 我的情况是这样的: public class MainActivity extends Activity { private static SoundPool sound; static int lock=1; int s; @Override public void
public class MainActivity extends Activity {
private static SoundPool sound;
static int lock=1;
int s;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
sound=new SoundPool(20, AudioManager.STREAM_MUSIC, 100);
s=sound.load(this,R.raw.bipsound, 0);
Button button = (Button) findViewById(R.id.button);
}
public void onClick(View v) {
switch(lock) {
case 0:
lock=1;
break;
case 1:
lock=0;
play();
break;
}
}
public void play(){
for(int i=0;i<10;i++){
sound.play(s,1.0f, 1.0f, 1, 0, 1);
if(lock==1)
return;
try {Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
公共类MainActivity扩展活动{
私人静态声池声音;
静态int-lock=1;
int-s;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
声音=新的声音池(20,AudioManager.STREAM_MUSIC,100);
s=声音。负载(这个,R.raw.bipsound,0);
Button Button=(Button)findViewById(R.id.Button);
}
公共void onClick(视图v){
开关(锁){
案例0:
lock=1;
打破
案例1:
lock=0;
play();
打破
}
}
公共游戏{
对于(int i=0;i这是一个问题尝试{Thread.sleep(1000);
内部play()
。您正在告诉主线程睡眠这几乎总是一个坏主意。按钮被按下并保持该状态,直到sleep()
时间结束
删除那一行。我不确定你想在那里完成什么,但你可以在一个单独的线程中运行它,比如TimerTask
,使用处理程序或其他类似功能。如果你需要更多帮助,请解释你想用它做什么。这是正常的,因为你正在使用尝试{Thread.sleep(1000);
,它会在1秒内停止主线程
您必须使用AsyncTask来完成此任务:)
这里有一个例子
private void goToMainActivity() {
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
Intent intent = new Intent(fa, Main.class);
startActivity(intent);
}
}.execute();
}
private void goToMainActivity(){
新建异步任务(){
@凌驾
受保护的Void doInBackground(Void…参数){
试一试{
睡眠(1000);
}捕捉(中断异常e){
e、 printStackTrace();
}
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
super.onPostExecute(结果);
意向意向=新意向(fa,Main.class);
星触觉(意向);
}
}.execute();
}