我正在制作一个具有记录按钮和切换按钮的应用程序。录制按钮开始录制声音,而切换按钮声明录制按钮是必须按住才能录制还是只按下一次。这就是我试图实现它的方式:
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)
{
}
如您所见,如果togglebutton 为“on”或“checked”,则必须按住录制按钮才能录制,当您松开按钮时,它会停止录制。现在这可行,但它只有一个缺陷。我正在将 isChecked 状态保存到 sharedpreferences,因此如果我将切换按钮“打开”然后重新启动应用程序,切换按钮将保持“打开”状态,但我必须将其关闭并再次打开才能工作。因此,如果我重新启动应用程序,它仍会处于“开启”状态,但无法正常工作。
此外,如您所见,如果切换按钮为假,我还没有编写代码。
我现在的代码:
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();
}
}
});
}
OnCheckedChangeListener:
touchToRecord.setOnCheckedChangeListener(new OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
saveCheckedState("touchToRecord", isChecked);
}
});
从共享首选项中获取切换按钮状态:
touchToRecord.setChecked(getCheckedState("touchToRecord"));