Я делаю приложение с кнопкой записи и переключателем. Кнопка записи начинает запись звука, а кнопка-переключатель объявляет, нужно ли кнопку записи УДЕРЖИВАТЬ для записи или нажимать только один раз. Вот как я пытаюсь этого добиться:
touchToRecord.setOnCheckedChangeListener(new OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
saveCheckedState("touchToRecord", isChecked);
if (isChecked)
{
recBtn.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN)
{
recBtn.setImageResource(com.whizzappseasyvoicenotepad.R.drawable.record_btn_pressed);
chTimer.setBase(SystemClock.elapsedRealtime());
chTimer.setText("00:00:00");
chTimer.start();
chTimer.setTextColor(Color.GREEN);
startRecording();
}
else if (event.getAction() == MotionEvent.ACTION_UP)
{
recBtn.setImageResource(com.whizzappseasyvoicenotepad.R.drawable.record_btn);
chTimer.stop();
chTimer.setBase(SystemClock.elapsedRealtime());
chTimer.setText("00:00:00");
chTimer.setTextColor(Color.GRAY);
stopRecording();
nameAlert();
}
return true;
}
});
}
else if (isChecked == false)
{
}
Как вы можете видеть, если переключатель включен или отмечен, кнопку записи нужно удерживать нажатой для записи, и когда вы отпускаете кнопку og, запись останавливается. Теперь это работает, но у него есть только один недостаток. Я сохраняю состояние isChecked в общих настройках, поэтому, если я включу переключатель, а затем перезапущу приложение, переключатель останется включенным, но мне придется снова его выключить и снова включить, чтобы он работал. Поэтому, если я перезапущу приложение, оно все еще будет включено, но не будет работать.
Кроме того, я еще не написал код того, что произойдет, если переключатель будет ложным, как вы можете видеть.
Мой код сейчас:
if (touchToRecord.isChecked() == true)
{
recBtn.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN)
{
recBtn.setImageResource(com.whizzappseasyvoicenotepad.R.drawable.record_btn_pressed);
startTimer();
startRecording();
}
else if (event.getAction() == MotionEvent.ACTION_UP)
{
recBtn.setImageResource(com.whizzappseasyvoicenotepad.R.drawable.record_btn);
stopTimer();
stopRecording();
nameAlert();
}
return true;
}
});
}
if (touchToRecord.isChecked() == false)
{
recBtn.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
if (recorder == null)
{
recBtn.setImageResource(com.whizzappseasyvoicenotepad.R.drawable.record_btn_pressed);
startTimer();
startRecording();
}
else if (recorder != null)
{
recBtn.setImageResource(com.whizzappseasyvoicenotepad.R.drawable.record_btn);
stopTimer();
stopRecording();
nameAlert();
}
}
});
}
Слушатель OnCheckedChange:
touchToRecord.setOnCheckedChangeListener(new OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
saveCheckedState("touchToRecord", isChecked);
}
});
Получить состояние переключателя из общих настроек:
touchToRecord.setChecked(getCheckedState("touchToRecord"));