1、 引言:随着Android应用的推广,我们发现很多应用都会有一个启动页面首先慢慢隐现,然后再慢慢消隐。如果第一次启动或升级该应用,启动页面过后会进入到一个导航页面,目的是为了给用户介绍该应用的特点或升级后的改进。所以Android应用的启动页与导航页的制作也是非常常见。本篇博客,就为大家分享一下Android应用启动页与导航页的其中一种制作方式。
2、 效果如下:
首次启动
3、 实现步骤:
1) 准备三个Activity与界面,分别是SplashActivity(启动页)、GuideActivity(导航页)与MainActivity(主页)。
2) 实现SplashActivity界面延时,并准备两个方法goGuide(),goHome()分别跳转到之后的GuideActivty(导航页)和MainActivity(主页)。
3) GuideActivity中使用ViewPager和Fragment实现页面滚动,并在后一个Fragment中制作一个跳转到MainActivity页面的Button。
4) 实现判断第一次启动APP,在SplashActivity中使用SharedPreferences储存APP的开启状态,之后进行判断,如果第一次启动实现goGuide()方法,跳转到导航页,否则直接进入主页。
4、 涉及知识点:
1) SharedPreferences存储,实现应用开启状态保存
SharedPreferences sharedPreferences = this.getSharedPreferences("share", MODE_PRIVATE);
Boolean user_first = sharedPreferences.getBoolean("FIRST", true);
Editor editor = sharedPreferences.edit();
2) sendEmptyMessageDelayed方法,实现界面延时
handler.sendEmptyMessageDelayed(GO_GUIDE, DELAY);
5、 代码实现:
1) SplashActivty:
package com.farsight.zguidesplash;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.view.Window;
public class SplashActivity extends Activity {
private static final int GO_HOME = 1000;// 跳转到主页标识
private static final int GO_GUIDE = 1001;// 跳转到导航页标识
private static final int DELAY = 3000;// 延时时间
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_splash);
init();
}
private void init() {
SharedPreferences sharedPreferences = this.getSharedPreferences(
"share", MODE_PRIVATE);
Boolean user_first = sharedPreferences.getBoolean("FIRST", true);
Editor editor = sharedPreferences.edit();// 使用SharedPreferences存储应用开启状态
if (user_first) {// 判断是否为第一次开启APP,并将标识传给Handler机制
editor.putBoolean("FIRST", false);
editor.commit();
handler.sendEmptyMessageDelayed(GO_GUIDE, DELAY);
} else {
handler.sendEmptyMessageDelayed(GO_HOME, DELAY);
}
}
private Handler handler = new Handler() {// 通过接收到的标识实现具体方法,跳转到主页或导航页
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
switch (msg.what) {
case GO_HOME:
goHome();
break;
case GO_GUIDE:
goGuide();
break;
}
}
};
public void goHome() {// 跳转到主页
startActivity(new Intent(SplashActivity.this, MainActivity.class));
finish();
}
public void goGuide() {// 跳转到导航页
startActivity(new Intent(SplashActivity.this, GuideActivity.class));
finish();
}
}
2) GuideActivity:
package com.farsight.zguidesplash;
import java.util.ArrayList;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.Window;
import com.farsight.fragment.FirstFragment;
import com.farsight.fragment.LastFragment;
import com.farsight.fragment.SecondFragment;
public class GuideActivity extends FragmentActivity {
private ViewPager viewPager;
private ArrayList<Fragment> pagerData;
@Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_guide);
initID();
initPager();
setViewPager();
}
public void initID() {// 初始化UI组件
viewPager = (ViewPager) findViewById(R.id.viewPager_Guide);
}
public void initPager() {// 初始化ViewPager中的Fragment页面
pagerData = new ArrayList<Fragment>();
pagerData.add(new FirstFragment());
pagerData.add(new SecondFragment());
pagerData.add(new LastFragment());
}
public void setViewPager() {// 设置ViewPager
viewPager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager()));
}
private class ViewPagerAdapter extends FragmentPagerAdapter {// ViewPager适配器
public ViewPagerAdapter(FragmentManager fm) {
super(fm);
// TODO Auto-generated constructor stub
}
@Override
public Fragment getItem(int arg0) {
// TODO Auto-generated method stub
return pagerData.get(arg0);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return pagerData.size();
}
}
}
热点新闻