録音ボタンとトグルボタンを持つアプリを作成しています。録音ボタンはサウンドの録音を開始し、togglebutton は、録音ボタンを押したままにして録音するか、1 回だけ押すかを宣言します。これは私がそれを達成しようとしている方法です:
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」の場合、録音ボタンを押し続けて録音する必要があり、ボタンを離すと録音が停止します。これで動作しますが、欠点が 1 つだけあります。isChecked 状態を sharedpreferences に保存しているので、トグルボタンを「オン」にしてからアプリを再起動すると、トグルボタンは「オン」のままになりますが、機能させるにはオフにしてから再度オンにする必要があります。そのため、アプリを再起動すると、まだ「オン」のままですが、機能しません。
また、ご覧のとおり、トグル ボタンが false の場合に何が起こるかについては、まだコードを書いていません。
私のコードは今:
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"));