启动页:为增加品牌或用户友好度而增加的页面,大部分情况下打开APP的情况下都会展示。现在有很多APP在这个页面中进行品牌露出、广告、活动等展示,展示方式也有静态图片、动态图片、动画等多种方式。
很多设计师都喜欢在启动和引导页做大量的设计,因为这样不但可以提高品牌辨识度、也能增强用户友好度。但是请尽量避免在闪屏上做过多设计,让用户能识别点击响应后尽可能做简化设计,避免大段文字、品牌形象和其他突兀的设计。
案例一
最简单的,最普通,最常用的,最常见的启动页,是一张图几秒后自动跳转
1.使用定时器类Timer
public class StartActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_log);
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
startActivity(new Intent(LogActivity.this, HomeActivity.class));
LogActivity.this.finish();
}
}, 3000);
}
}
2.使用postDelayed()延时方法
public class StartActivity extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
TextView tv_logo = findViewById(R.id.tv_logo);
//this::jump java8里的一个新写法
tv_logo.postDelayed(this::jump,5000L);
}
/* 页面逻辑跳转 */
private void jump() {
startActivity(new Intent(this, MainActivity.class));
finish();
}
}
案例二
启动页+动画(旋转,缩放,渐变)
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/rltl_welcome"
android:background="@drawable/splash_bg_newyear"
tools:context=".WelcomeActivity">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:src="@drawable/splash_sheep_newyear" />
</RelativeLayout>
public class WelcomeActivity extends Activity {
// ctrl+alt+c 并将"start_main"选中 创建静态常量
public static final String START_MAIN = "start_main";
RelativeLayout rltl_welcome;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_welcome);
rltl_welcome = (RelativeLayout) findViewById(R.id.rltl_welcome);
//动画
// 渐变
AlphaAnimation aa = new AlphaAnimation(0,1);
aa.setDuration(1000);
aa.setFillAfter(true);
//缩放
ScaleAnimation sa = new ScaleAnimation(0,1,0,1,ScaleAnimation.RELATIVE_TO_SELF,0.5f,ScaleAnimation.RELATIVE_TO_SELF,0.5f);
sa.setDuration(1000);
sa.setFillAfter(true);
//旋转
RotateAnimation ra = new RotateAnimation(0,360,RotateAnimation.RELATIVE_TO_SELF,0.5f,RotateAnimation.RELATIVE_TO_SELF,0.5f);
ra.setDuration(1000);
ra.setFillAfter(true);
AnimationSet set = new AnimationSet(true);
set.addAnimation(aa);
set.addAnimation(sa);
set.addAnimation(ra);
rltl_welcome.setAnimation(set);
set.setAnimationListener(new Animation.AnimationListener() {
//当动画开始播放的时候
@Override
public void onAnimationStart(Animation animation) {
}
//当动画播放结束的时候
@Override
public void onAnimationEnd(Animation animation) {
// Toast.makeText(WelcomeActivity.this,"动画播放完成!",Toast.LENGTH_LONG).show();
//判断是否进入过 主页面
boolean isStartMain = CacheUtils.getBoolean(WelcomeActivity.this, START_MAIN);
if (isStartMain){
//如果进入过主界面,直接进入主页面
startActivity(new Intent(WelcomeActivity.this,MainActivity.class));
}else {
//如果没有进入过主界面,直接进引导页面
startActivity(new Intent(WelcomeActivity.this,GuideActivity.class));
}
finish();
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
}
}
案例三
启动页+倒计时按钮
倒计时可以用CountDownTimer类
public class SplashActivity extends AppCompatActivity{
TextView tv_time;
CountDownTimer countDownTimer;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
tv_time = (TextView) findViewById(R.id.tv_time);
countDownTimer = new CountDownTimer(3000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
// tv_time.setClickable(false);
tv_time.setText(millisUntilFinished / 1000 + "秒");
}
@Override
public void onFinish() {
tv_time.setText("跳转");
// tv_time.setClickable(true);
startActivity(new Intent(SplashActivity.this, MainActivity.class));
finish();
}
};
countDownTimer.start();
tv_time.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(SplashActivity.this, MainActivity.class));
finish();
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
//取消 关闭倒计时
countDownTimer.cancel();
countDownTimer.onFinish();
Log.e("Tag","倒计时结束啦");
}
}