本文介绍使用ViewPager实现应用前的引导页,主要包括:
1.ViewPager实现
2.添加导航点
3.添加进入主界面按钮
4.添加数据储存
详细代码:github.com/Baolvlv/LearnAndroid/tree/master/ViewPageDemo
1.ViewPager实现
实现步骤:(1)设置几个不同的view布局,(2)将view布局加入1个view的list内(3)通过list实例化viewPagerAdapter(4)在布局资源中查找到viewPager,设置viewPagerAdapter
将布局资源解析后加入List中:
private Listviews;
LayoutInflater inflater = LayoutInflater.from(this);
views=newArrayList();
views.add(inflater.inflate(R.layout.one,null));
views.add(inflater.inflate(R.layout.two,null));
views.add(inflater.inflate(R.layout.three,null));
创建ViewPagerAdapter类继承自PagerAdapter,重写view创建,销毁,数量,判断view是不是所需的对像,4个方法。包含context与view的构造方法
privateListviews;
privateContextcontext;
publicViewPagerAdapter(List views,Context contex){
this.views= views;
this.context= contex;
}
//当view销毁时移除
@Override
public voiddestroyItem(ViewGroup container, intposition,Object object) {
container.removeView(views.get(position));
}
//添加view
@Override
publicObjectinstantiateItem(ViewGroup container, intposition) {
container.addView(views.get(position));
returnviews.get(position);
}
//返回当前view的数量
@Override
public intgetCount() {
returnviews.size();
}
//判断当前的view是不是需要的对象
@Override
public booleanisViewFromObject(View view,Object object) {
returnview == object;
在布局资源文件中添加viewPager标签
android:id="@+id/viewpage"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:persistentDrawingCache="animation">
实例化viewPagerAdapter
vpAdapater=newViewPagerAdapter(views,this);
查找到viewpager并设置adapter
vp= (ViewPager) findViewById(R.id.viewpage);
vp.setAdapter(vpAdapater);
2.添加导航点
在父级容器添加线形布局
android:id="@+id/ll"
android:layout_width="match_parent"
android:layout_height="wrap_content"
水平排布:
android:orientation="horizontal”
水平居中:
android:gravity=“center_horizontal"
位于父级容器的底部:
android:layout_alignParentBottom=“true"
添加3个子标签,设置背景为选中与不选中的点图片
android:src="@drawable/login_point_selected"
设置变量
//储存多个ImageView的数组
privateImageView[]dots;
//储存多个ImageView ID的数组
初始化变量
//初始化点数组,通过循环对每个点查找id后赋值,初始化数组中每个点
private voidinitDots(){
dots=newImageView[views.size()];
for(inti =0;i
dots[i] = (ImageView) findViewById(ids[i]);
}
主Activity实现onPageChangeListener接口,实现三个方法
implementsViewPager.OnPageChangeListener
在页面初始化后,为页面添加pageChangeListener监听器
//添加页面改变的回调
vp.addOnPageChangeListener(this);
页面选择后点的改变在onPageSelected方法中实现,将当前选中的点图标设为选中的图案
//当页面选择后
@Override
public voidonPageSelected(intposition) {
for(inti =0;i
if(position == i){
dots[i].setImageResource(R.drawable.login_point_selected);
}else{
dots[i].setImageResource(R.drawable.login_point);
}
//当页面滚动后方法
@Override
public voidonPageScrolled(intposition, floatpositionOffset, intpositionOffsetPixels) {
}
//当页面滚动状态改变时
@Override
public voidonPageScrollStateChanged(intstate) {
}
3.添加进入主界面按钮
在第三个引导页面的布局文件中,修改主布局为RelativeLayout,在主布局中添加位于下方居中的LinerLayout,在线形布局中添加button标签
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="horizontal"
android:layout_alignParentBottom="true">
android:id="@+id/start_btn"
android:text="进入"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
而后在view开始时,查找到按钮并设置事件监听器,启动另一个activity
//先通过view获取到包含button的布局,再通过findViewById查找到当前button
start_btn= (Button)views.get(2).findViewById(R.id.start_btn);
//设置事件监听器
start_btn.setOnClickListener(newView.OnClickListener() {
@Override
public voidonClick(View v) {
//设置启动下一个activity
Intent i =newIntent(Guide.this,MainActivity.class);
startActivity(i);
//结束当前activity
finish();
}
});
activity启动之前需要在AndroidManifest文件中注册
4.添加数据储存
实现初次进入应用时,从欢迎界面跳转到引导页,以后从欢迎界面跳转到主页面
(1)分别编写跳转引导页与主页面的函数,即启动相应的activity
private voidgoHome(){
Intent i =newIntent(WelcomeAct.this,MainActivity.class);
startActivity(i);
finish();
}
private voidgoGuide(){
Intent i =newIntent(WelcomeAct.this,Guide.class);
startActivity(i);
finish();
}
(2)通过SharedPreference储存标志变量,并判断情况后,通过handler发送信息
//初始化函数
private voidinit(){
//通过SharedPreference储存isFirst数据,初值为true
SharedPreferences preferences = getPreferences(MODE_PRIVATE);
isFirstIn= preferences.getBoolean("isFirstIn",true);
//如果不是初次进入,通过handler发送GO_HOME类型的,TIME延迟的信息
if(!isFirstIn){
handler.sendEmptyMessageDelayed(GO_HOME,TIME);
}else{
//如果初次进入,通过handler发送GO—_GUIDE类型的,TIME延迟的信息
handler.sendEmptyMessageDelayed(GO_GUIDE,TIME);
//通过editor修改isFirstIn的储存内容,然后提交修改
SharedPreferences.Editor editor = preferences.edit();
editor.putBoolean("isFirstIn",false);
editor.commit();
}
实例化handler,判断不同的信息执行相应的情况
//实例化handler,判断信息的类型进行相应的跳转
privateHandlerhandler=newHandler(){
@Override
public voidhandleMessage(Message msg) {
switch(msg.what){
caseGO_HOME:
goHome();
break;
caseGO_GUIDE:
goGuide();
break;
}