Я создаю приложение для пианино в студии Android:
У меня есть прослушиватель щелчка для моей кнопки воспроизведения, который при нажатии должен сделать кнопки записи и воспроизведения невидимыми, а кнопку остановки - видимой во время воспроизведения записанных звуков.
Кнопка воспроизведения
mBtn_Play.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
mRecordingState = "Playing";
switchButtonVisibility();
for (final int sound: mListRecordedSounds )
{
if (mRecordingState == "Ready")
{//break out of loop when stop button is pressed
break;
}
else {
mSoundPool.play(sound, 1,1,1,0,1);
try
{
Thread.sleep(500);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
}
});
}
Способ переключения видимости кнопки
private void switchButtonVisibility()
{
if (mRecordingState != "Ready")
{
mBtn_Stop.setVisibility(View.VISIBLE);
mBtn_Record.setVisibility(View.GONE);
mBtn_Play.setVisibility(View.GONE);
}
else
{
mBtn_Stop.setVisibility(View.GONE);
mBtn_Record.setVisibility(View.VISIBLE);
mBtn_Play.setVisibility(View.VISIBLE);
}
}
С кнопками записи и остановки все работает правильно
mBtn_Record.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
mListRecordedSounds.clear();
mRecordingState = "Recording";
switchButtonVisibility();
}
});
mBtn_Stop.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
mRecordingState = "Ready";
switchButtonVisibility();
}
});
По какой-то странной причине он сначала выполняет цикл for
и воспроизводит звуки до того, как метод switchButtonVisibility();
изменит видимые кнопки. Кажется, это не имеет никакого смысла, поскольку метод находится над циклом. Есть ли способ установить его так, чтобы видимость кнопки изменялась сначала перед выполнением цикла и воспроизведением звуков?