0

録音ボタンとトグルボタンを持つアプリを作成しています。録音ボタンはサウンドの録音を開始し、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"));
4

1 に答える 1

2

それはあなたの論理についてです。これは、ユーザーが を変更したときにオンオフonCheckedChangeListenerかを確認することを意味します。したがって、アプリを強制終了して再起動すると、に変更がないため、機能しません。Toggle ButtonToggle Button

onTouchListenerの外側に置きますonCheckedChangeListener。あなたのonCheckedChangeListenerセットであなたのステータス(OnまたはOff)とそれがOnまたはOffonTouchListenerであるかどうかをチェックし、あなたの行動を実行してください。

于 2013-08-14T20:09:45.633 に答える