启动加载跳过过渡动画

时间:2014-04-15 11:05:16

标签: java android transition

我是android编程的新手,在这里我尝试使用RunOnUIThread创建一个带有3个不同图像的闪屏,这里是代码

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>

在android模拟器上执行后,我在logcat中得到消息说它跳过了42帧,因为应用程序在它的主线程上做了太多工作而且转换动画没有像我想的那样工作..我做错了什么线?请引导我解释一下。

1 个答案:

答案 0 :(得分:0)

我尝试了各种可能的方法之后想出了什么......并且跳过了帧,因为我没有完全停止线程(我猜?如果这个错误,请纠正我)所以我将添加返回; < / strong>停止这样的线程:

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

现在转换动画正在运行而不会跳过任何帧...抱歉提出愚蠢的问题并发布愚蠢的答案。