0

我正在制作一个具有记录按钮和切换按钮的应用程序。录制按钮开始录制声音,而切换按钮声明录制按钮是必须按住才能录制还是只按下一次。这就是我试图实现它的方式:

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"));
4

1 回答 1

2

这是关于你的逻辑。您有onCheckedChangeListener,这意味着您将在用户更改时检查它是打开还是关闭Toggle Button。因此,当您杀死应用程序并重新启动时,由于没有任何更改Toggle Button,因此它将无法正常工作。

把你的onTouchListener外面onCheckedChangeListener。在您onCheckedChangeListener设置的状态(OnOff)中并onTouchListener检查它是On还是Off并执行您的操作。

于 2013-08-14T20:09:45.633 回答