rphello101
rphello101

Reputation: 1771

Activity will run, but not show up (Android)?

I'm just trying to test some stuff with a splash screen. The strangest thing happens when I run the app though. I can see my Log messages in the LogCat, but the activity itself won't show up. Once the loop finishes, it starts the next activity, which does in fact show up. If I comment out the UIThread, it will show up though. I know I'm doing something simple wrong, but I'm not sure what it is. Ideas?

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"
/>

Java:

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();
}

}

Upvotes: 1

Views: 1486

Answers (2)

PC.
PC.

Reputation: 7024

instead of calling runOnUiThread directly do the following:

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

I'm not sure if your animation will work, but surely your activity will show up.

Upvotes: 0

Vivek Kumar Srivastava
Vivek Kumar Srivastava

Reputation: 2158

change your oncreate method like this

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();

    }

Upvotes: 2

Related Questions