Question

I'm new in android programming, and here i try to create some splash screen with 3 different images showing up one after another using RunOnUIThread, here's the code

Splash.java

public class Splash extends Activity {

int loading_count;
int imgShowed = 1;
ImageView img1, img2;
ImageSwitcher imgSwitcher;

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

    img1 = (ImageView)findViewById(R.id.img01);
    img2 = (ImageView)findViewById(R.id.img02);
    imgSwitcher = (ImageSwitcher)findViewById(R.id.splash_switcher);

    LoadingThread();
}

private void LoadingThread(){
    Thread loading = new Thread(){
        @Override
        public void run(){
            try{
            //=================================//
            //   Looping for splash loading    //
            //=================================//
                while(loading_count < 170){
                    sleep(50);
                    runOnUiThread(new Runnable(){
                        @Override
                        public void run() {
                            if(loading_count >=20){
                                if(imgShowed == 1){
                                    imgSwitcher.showNext();
                                    imgShowed = 2;
                                }
                            }if(loading_count >= 70){
                                if(imgShowed == 2){
                                    img1.setImageResource(R.drawable.two);
                                    imgSwitcher.showNext();
                                    imgShowed = 3;
                                }
                            }if(loading_count >= 120){
                                if(imgShowed == 3){
                                    img2.setImageResource(R.drawable.three);
                                    imgSwitcher.showNext();
                                    imgShowed = 4;
                                }
                            }
                            loading_count += 1;
                        }
                    });
                }
            }catch(InterruptedException e){
                e.printStackTrace();
            }finally{
                StartMainMenu();
            }
        }
    };
    loading.start();
}

private void StartMainMenu(){
    Intent mainmenu = new Intent(this, MainMenu.class);
    finish();
    startActivity(mainmenu);
    overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
}

Layout.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#000000" >

    <ImageSwitcher 
        android:id="@+id/splash_switcher"
        android:layout_centerInParent="true"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:background="#00000000"
        android:inAnimation="@anim/fade_in"
        android:outAnimation="@anim/fade_out"
        >

        <ImageView 
            android:id="@+id/img01"
            android:layout_height="200dp"
            android:layout_width="200dp"
            android:scaleType="fitXY"
            android:background="#000000"
            android:contentDescription="@string/app_name"
            />

        <ImageView 
            android:id="@+id/img02"
            android:layout_height="200dp"
            android:layout_width="200dp"
            android:scaleType="fitXY"
            android:background="@drawable/one"
            android:contentDescription="@string/app_name"
            />

    </ImageSwitcher>

</RelativeLayout>

after executing it on android emulator, i got message in logcat says it's skipped 42 frames because application doing too much work on it's main thread and the transition animation didn't work as i intended.. did i do something wrong in the thread? please guide me through with an explanation.

Was it helpful?

Solution

i figured something out after trying with every possible way.. and frames skipped happen because i'm not stop the thread completely (i guess? correct me if this wrong) so i will add return; to stop the thread like this :

...
if(loading_count >= 170){
    StartMainMenu();
    return;
}
...

and now the transition animation are working without skipping any frames.. sorry for asking stupid question and posting stupid answer.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top