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 回答