以下代码适用于我的app中的启动画面.我需要做的是当活动加载图像时应该显示为默认值,然后几秒后图像应该在同一活动中更改为另一个.我有另一个像第一个不同颜色的图像.我想在几秒钟后更改该图像的屏幕.
我在我的代码中这样做了.
package com.ruchira.busguru; import android.media.MediaPlayer; import android.os.AsyncTask; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.graphics.Color; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.ImageView; import android.widget.RelativeLayout; public class SplashScreen extends Activity { ImageView imgBus; MediaPlayer introSound,bellSound; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.splash_screen); imgBus = (ImageView) findViewById(R.id.imgBus); imgBus.setImageResource(R.drawable.blackbus); introSound = MediaPlayer.create(SplashScreen.this,R.raw.enginestart); introSound.start(); Thread timer = new Thread(){ public void run(){ try{ sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); }finally{ imgBus.setImageResource(R.drawable.bluekbus); } } }; timer.start(); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.splash_screen,menu); return true; } @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); introSound.stop(); finish(); } @Override protected void onStop() { // TODO Auto-generated method stub super.onStop(); introSound.stop(); finish(); } }
但问题是程序停止执行线程说…
“android.view.ViewRoot $CalledFromWrongThreadException:只有创建视图层次结构的原始线程才能触及其视图.”
我如何才能实现这一目标?有人请帮我解决这个问题.我是android开发的新手..
谢谢.
解决方法
您应该使用ImageView的Handler和Runnable. Handler是特定于Android的调度程序,它们可以在UI线程上运行.试试这个:
ImageView imgBus; MediaPlayer introSound,bellSound; Runnable swapImage = new Runnable() { @Override public void run() { imgBus.setImageResource(R.drawable.bluekbus); } };
在onCreate()里面调用:
imgBus = (ImageView) findViewById(R.id.imgBus); imgBus.setImageResource(R.drawable.blackbus); imgBus.postDelayed(swapImage,3000); // Add me!
了解启动画面是不受欢迎的,因为您应该专注于尽快启动应用程序(同时在后台加载较慢的元素).然而,有时稍微延迟是不可避免的.