美文网首页
Android中的ViewPager引导页

Android中的ViewPager引导页

作者: baolvlv | 来源:发表于2017-09-01 16:35 被阅读0次

    本文介绍使用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;

    }

    相关文章

      网友评论

          本文标题:Android中的ViewPager引导页

          本文链接:https://www.haomeiwen.com/subject/tvrkjxtx.html