我是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帧,因为应用程序在它的主线程上做了太多工作而且转换动画没有像我想的那样工作..我做错了什么线?请引导我解释一下。
答案 0 :(得分:0)
...
if(loading_count >= 170){
StartMainMenu();
return;
}
...
现在转换动画正在运行而不会跳过任何帧...抱歉提出愚蠢的问题并发布愚蠢的答案。