1

Androidスタジオでピアノアプリを作成しています:

アプリのスクリーンショット

再生ボタンのオンクリックリスナーがあります。これを押すと、録音ボタンと再生ボタンが非表示になり、録音されたサウンドの再生中に停止ボタンが表示されます。

再生ボタン

mBtn_Play.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            mRecordingState = "Playing";
            switchButtonVisibility();

            for (final int sound: mListRecordedSounds )
            {
                if (mRecordingState == "Ready")
                {//break out of loop when stop button is pressed
                    break;
                }
                else {

                    mSoundPool.play(sound, 1,1,1,0,1);
                    try
                    {
                        Thread.sleep(500);
                    }
                    catch (InterruptedException e)
                    {
                        e.printStackTrace();
                    }
                }
            }
        }
    });
}

ボタンの表示切り替え方法

private void switchButtonVisibility()
{

    if (mRecordingState != "Ready")
    {
        mBtn_Stop.setVisibility(View.VISIBLE);
        mBtn_Record.setVisibility(View.GONE);
        mBtn_Play.setVisibility(View.GONE);

    }
    else
    {
        mBtn_Stop.setVisibility(View.GONE);
        mBtn_Record.setVisibility(View.VISIBLE);
        mBtn_Play.setVisibility(View.VISIBLE);
    }

}

録音ボタンと停止ボタンを使用すると、これは正しく機能します

mBtn_Record.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            mListRecordedSounds.clear();
            mRecordingState = "Recording";
            switchButtonVisibility();

        }
    });
mBtn_Stop.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            mRecordingState = "Ready";
            switchButtonVisibility();
        }
    });

何らかの奇妙な理由で、for最初にループを実行し、switchButtonVisibility();メソッドが表示されるボタンを変更する前にサウンドを再生しています。メソッドがループの上にあるため、これは意味がないようです。ループが実行されてサウンドが再生される前に、ボタンの可視性が最初に変更されるように設定する方法はありますか?

4

1 に答える 1