1

viewflipper の 5 つの子の間でランダムな時間間隔でランダムな順序で「反転」するメニューを作成したいと考えています。

次のコードを試してみたところ、System.out.println にデバッグ メッセージが表示され、ランダムな時間間隔で logcat に記録されるようになりました。ただし、エミュレーターの画面はすべて黒です。

「onCreate」メソッドでsetDisplayedChildメソッドを固定intで単純に使用すると、正常に機能します。これで私を助けてもらえますか?どうもありがとう!

public class FlipperTest extends Activity {

int randomTime;
int randomChild;
ViewFlipper fliptest;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_beat_the_game);
    ViewFlipper fliptest = (ViewFlipper) findViewById(R.id.menuFlipper);

            //this would work
            //fliptest.setDisplayedChild(3);

    while (true){
        try {
            Thread.sleep(randomTime);

        } catch (InterruptedException e) {
            e.printStackTrace();
        }finally{
            Random timerMenu = new Random();
            randomTime  = timerMenu.nextInt(6) * 2000;
            Random childMenu = new Random();
            randomChild = childMenu.nextInt(5);
            fliptest.setDisplayedChild(randomChild);

            System.out.println("executes the finally loop");
        }
    }

}
4

2 に答える 2

2

Thread.sleep()(+ 無限ループ) のように UI スレッドをブロックしないでください。代わりHandlerに、たとえば、フリップを作成するために使用します。

private ViewFlipper mFliptest;
private Handler mHandler = new Handler();
private Random mRand = new Random();
private Runnable mFlip = new Runnable() {

    @Override
    public void run() {
        mFliptest.setDisplayedChild(mRand.nextInt());
        mHandler.postDelayed(this, mRand.nextInt(6) * 2000);
    }    
}

//in the onCreate method
mFliptest = (ViewFlipper) findViewById(R.id.menuFlipper);
mHandler.postDelayed(mFlip, randomTime);
于 2013-07-18T15:03:14.603 に答える
1

これが私の最終的なコードです。いくつか変更しました: run メソッドに randomTime int を入れて、実行のたびに更新されるようにし、ハンドラーがランダムに遅延するようにしました。それ以外の場合、ランダムに生成された数の最初の実行に従って遅延し、時間間隔は同じままになります。また、生成された randomTime int を操作する必要がありました。ランダムに生成された int が 0 の場合、遅延も 0 になり、フリップが即座に発生するためです。

あなたの助けをありがとう!:-)

private ViewFlipper fliptest;
private Handler testHandler = new Handler();
private Random mRand = new Random();
private Random timerMenu = new Random();
int randomTime;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity);


    fliptest = (ViewFlipper) findViewById(R.id.menuFlipper);
    testHandler.postDelayed(mFlip, randomTime);
}

private Runnable mFlip = new Runnable() {

    @Override
    public void run() {
        randomTime  = (timerMenu.nextInt(6) + 1) * 2000;

        System.out.println("executes the run method " + randomTime);
        fliptest.setDisplayedChild(mRand.nextInt(6));
        testHandler.postDelayed(this, (mRand.nextInt(6)+ 1) * 2000);
    }    
};
于 2013-07-19T08:48:44.540 に答える