Android中的ViewPager引导页

2017-09-01  本文已影响0人  baolvlv

本文介绍使用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的数组

private int[]ids= {R.id.iv1,R.id.iv2,R.id.iv3};

初始化变量

//初始化点数组,通过循环对每个点查找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;

}

上一篇下一篇

猜你喜欢

热点阅读