1

スプラッシュスクリーンでいくつかのものをテストしようとしています。ただし、アプリを実行すると、最も奇妙なことが起こります。LogCat でログ メッセージを確認できますが、アクティビティ自体は表示されません。ループが終了すると、実際に表示される次のアクティビティが開始されます。UIThread をコメントアウトすると表示されます。単純な間違いをしていることは知っていますが、それが何であるかはわかりません。アイデア?

XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" 
android:background="#000000">

<ImageView
    android:id="@+id/logoIV"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:paddingLeft="50dp"
    android:paddingTop="50dp"
    android:src="@drawable/logoa"
/>

ジャワ:

public class Splash extends Activity{

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.splash);

    final ImageView logo = (ImageView) findViewById(R.id.logoIV);
    final int[] anim = new int[6];

    anim[0]=R.drawable.logoa;
    anim[1]=R.drawable.logob;
    anim[2]=R.drawable.logoc;
    anim[3]=R.drawable.logod;
    anim[4]=R.drawable.logoe;
    anim[5]=R.drawable.logof;

    runOnUiThread(new Runnable() {
        int img = 0, counter=0;
        boolean up = true;
         public void run() {
            while(counter<21){
                logo.setImageResource(anim[img]);
                if(up){
                    img++;
                    if(img>=5)
                        up=false;
                }else{
                    img--;
                    if(img<=0)
                        up=true;
                }
                try{
                    Thread.sleep(150);
                }catch (InterruptedException e){
                    e.printStackTrace();
                }
                counter++;
                Log.e("Tag",Integer.toString(counter));
            }
            if(counter>=21){
                Intent creditsIntent = new Intent(Splash.this, TitlePage.class);
                creditsIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                Splash.this.startActivity(creditsIntent);
            }
        }
    });
}

@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
    finish();
}

}

4

2 に答える 2

2

このように oncreate メソッドを変更します

protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.splash);

        final ImageView logo = (ImageView) findViewById(R.id.logoIV);
        final int[] anim = new int[6];

        anim[0] = R.drawable.logoa;
        anim[1] = R.drawable.logob;
        anim[2] = R.drawable.logoc;
        anim[3] = R.drawable.logod;
        anim[4] = R.drawable.logoe;
        anim[5] = R.drawable.logof;

        Thread t = new Thread(new Runnable()
        {
            int img = 0, counter = 0;
            boolean up = true;

            @Override
            public void run()
            {
                while (counter < 21)
                {
                    runOnUiThread(new Runnable()
                    {
                        public void run()
                        {
                            logo.setImageResource(anim[img]);
                        }
                    });

                    if (up)
                    {
                        img++;
                        if (img >= 5)
                            up = false;
                    }
                    else
                    {
                        img--;
                        if (img <= 0)
                            up = true;
                    }
                    try
                    {
                        Thread.sleep(150);
                    }
                    catch (InterruptedException e)
                    {
                        e.printStackTrace();
                    }
                    counter++;
                    Log.e("Tag", Integer.toString(counter));
                }
                if (counter >= 21)
                {
                    runOnUiThread(new Runnable()
                    {
                        public void run()
                        {
                            Intent creditsIntent = new Intent(Splash.this, TitlePage.class);
                            creditsIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                            Splash.this.startActivity(creditsIntent);
                        }
                    });
                }
            }
        });

        t.start();

    }
于 2012-07-10T06:03:22.127 に答える
0

直接呼び出す代わりにrunOnUiThread、次のことを行います。

new Timer().schedule(new TimerTask()
{           
    @Override
    public void run()
    {
        runOnUiThread(new Runnable()
        {
            int img = 0, counter=0; 
            .....
        }
    }
}, 1000);

アニメーションが機能するかどうかはわかりませんが、アクティビティが表示されることは間違いありません。

于 2012-07-10T06:04:08.780 に答える