SplashActivity.java:
public class SplashActivity extends FragmentActivity {
// create object of progressbar
ProgressBar prgLoading;
// set variable for progress bar to 0
int progress = 0;
private View view;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_splash);
Animation slide = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.slide_in_left);
final ImageView splashImageView = (ImageView) findViewById(R.id.splashImageView);
splashImageView.setBackgroundResource(R.anim.splash);
final AnimationDrawable frameAnimation = (AnimationDrawable) splashImageView
.getBackground();
view.startAnimation(slide);
Thread timer = new Thread() {
public void run() {
try {
sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
Intent splash = new Intent(SplashActivity.this,
HomeActivity.class);
startActivity(splash);
}
}
};
timer.start();
splashImageView.post(new Runnable() {
@Override
public void run() {
frameAnimation.start();
}
});
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
finish();
}
}
layout_splash.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_above="@android:id/tabs" >
<ImageView
android:id="@+id/splashImageView"
android:background="@drawable/spl1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</FrameLayout>
</RelativeLayout>
</LinearLayout>
在res / anim / slide_in_left.xml中:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false" >
<translate android:duration="1000" android:fromXDelta="0%" android:toXDelta="-100%"/>
<alpha android:duration="1000" android:fromAlpha="1.0" android:toAlpha="0.0" />
</set>
在res / anim / splash.xml中:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/flaganim"
android:oneshot="false"
>
<item android:drawable="@drawable/spl1" android:duration="2000" />
<item android:drawable="@drawable/spl2" android:duration="2000" />
<item android:drawable="@drawable/spl3" android:duration="2000" />
</animation-list>
答案 0 :(得分:2)
我删除了代码中所有不必要的部分。另外,我对它进行了一些改进,例如我使用Timer
代替Thread.sleep()
,finish()
中奇怪的onPause()
可以替换为Intent
个标记。我还删除了对动画drawable的调用。通过幻灯片动画,我假设您不再需要它了。
public class SplashActivity extends FragmentActivity {
private final TimerTask spashScreenFinished = new TimerTask() {
@Override
public void run() {
Intent splash = new Intent(SplashActivity.this, HomeActivity.class);
// We set these flags so the user cannot return to the SplashScreen
splash.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(splash);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_splash);
// We get the ImageView and set the background. (If possible do this in XML instead of code)
final ImageView splashImageView = (ImageView) findViewById(R.id.splashImageView);
splashImageView.setBackgroundResource(R.anim.splash);
// We load the slide animation and apply it to the ImageView
Animation slide = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.slide_in_left);
splashImageView.startAnimation(slide);
// We use a Timer to schedule a TimerTask for 5 seconds in the future!
Timer timer = new Timer();
timer.schedule(this.spashScreenFinished, 5000);
}
}
另外:不要使用闪屏!它们总是一个设计糟糕的应用程序的标志。如果您的应用需要在启动时加载那么多,那么您做错了。如果它不需要加载任何东西,那么没有理由让用户等待5秒钟。一个好的应用程序应该立即启动并尽快使用。
答案 1 :(得分:1)
您可以使用TranslateAnimation
DisplayMetrics outMetrics = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(outMetrics);
TranslateAnimation imageAnimation = new TranslateAnimation(outMetrics.widthPixels, 0, 0, 0);
imageAnimation.setDuration(1500);
splashImageView.startAnimation(imageAnimation);
然后,您可以使用TranslateAnimation
构造函数中传递的值来获取所需的动画量。
答案 2 :(得分:0)
Android内置动画幻灯片,因此您可以使用它们。
您可以通过执行以下操作来调用它们:
Animation anim = AnimationUtils.loadAnimation(getApplicationContext(), android.R.id.slide_in_right);
然后你可以这样做:
splashImageView.setAnimation(anim);
然后图像将从右侧滑入。
还有android.R.anim.slide_out_left
以下是slide_in_right.xml的源代码供参考。
如果您愿意,可以将该代码调用到您的项目中并进行实验以获得不同的结果,但请记住在调用时删除android.
。
答案 3 :(得分:0)
我没有动画方面的工作知识。但是,我有解决方案jus尝试它。设置要在启动画面中显示的左右两侧图像。写一个条件,设置为右侧图像可见几秒钟,然后为左侧图像设置可见几秒钟。它看起来也像你想要实现的动画。简单说明: - )