GuidePageView的用法及源码解析

YFAndroidLibs之GuidePageView的用法及源码解析

关于(About)

GuidePageView故名思意,是指第一次进入应用时的导航页,效果图如下:

GuidePageView的用法及源码解析_第1张图片
GuidePageView的用法及源码解析_第2张图片

设计思路及主要接口(Features)

主要的技术点有:

1.自定义抽样类:GuideAdapter

public abstract class GuideAdapter {

    private GuidePageView mGuidePageView;

    public abstract List getIndicator();

    public abstract List getDisplayView();

    public void setGuidePageView(GuidePageView guidePageView){
        mGuidePageView=guidePageView;
    }
   //可扩展

}

其中getIndicator()方法用来设置indicator的图像信息;getDisplayView()用来设置页面展示信息;setGuidePageView(GuidePageView guidePageView)主要是在程序中获取GuidePageView对象,对用户是不可见的。后期可扩展。

2.在实现了adapter方式后,进一步思考能否简化程序。adapter的优势在于程序逻辑清晰,明了,可扩展性也高,然而却有点繁杂,所以进一步封装出另外一种集成方式:setData(int drawable, int[] imgs),用户只需要提供一个selector形式的drawable资源,和一组图片资源,简单好用。

    public void setData(int drawable, int[] imgs){

    //图片数量
    lens=imgs.length;
    //点
    initDots(lens, drawable);
    //视图
    initViews(imgs);

    vp.setOffscreenPageLimit(3);
    vp.setCurrentItem(0);

}

3.在代码中需要改变设置或者样式的地方不在少数,有时候显示设置会显得臃肿,所以提出使用一个设置类的实体类:GuidePageViewStyle。

/**
 * 获取样式对象
 */
public GuidePageViewStyle getGuidePageStyle(){
    return mGuidePageViewStyle;

}

用户可以在程序中通过这个方法直接获取GuidePageViewStyle对象,支持的设置有:

//dot和底部之间的距离
private int dotsHeight;

//按钮样式
private int btnStyle=R.drawable.flag_01;

//btn和底部之间的距离
private int btnHeight;

//btn的文字,默认为“马上体验”
private String btnStr="马上体验";

4.设置直接点击跳过事件,调用该方法设置跳转。

/**
 * 设置点击事件
 */
public void setJumpClick(OnClickListener listener){

}

5.另外:由于GuidePageView一般情况下,只在程序中出现一次,即第一次进入程序的时候。在工作中,一般可以在前一个界面中设置:SharedPreferences。比如:

    if(sp.getBoolean("isFirsh", true)==true){
        setHotCity();
        editor.putBoolean("isFirsh", false);
        editor.commit();
        //相应的intent,跳转到GuidePage界面

     }else{
       //想应的intent,跳转到其他的常规界面

     }

主要暴露接口和设置:

  1. 设置若干展示图片;
  2. 设置dot的样式;
  3. 设置点击按钮的文字、样式及位置;
  4. 设置跳转监听器;
  5. 提供两种设置数据方式:setData()及setAdapter();
  6. 在持续更新。

使用

导入包:

详见我的另外一篇博文:http://blog.csdn.net/u011072613/article/details/53889596

在布局文件中添加

 

代码设置:

1.在代码中设置数据:

方式一:

    mGuidePageView.setAdapter(new CustomGuideAdapter());

其中CustomGuideAdapter()继承了GuideAdapter():

    class CustomGuideAdapter extends GuideAdapter{

    @Override
    public List getIndicator() {

        // TODO Auto-generated method stub
        dotViews = new ArrayList();  

        for(int i = 0; i < pics.length; i++){

            ImageView iv=(ImageView)LayoutInflater.from(getApplicationContext()).inflate(R.layout.dot_view, null);
            ImageView iv01=new ImageView(getApplicationContext());
            iv01.setBackgroundResource(R.drawable.dot);
            iv01.setLayoutParams(mParams);  
            mParams.setMargins(20, 20, 20,
                    20);
            dotViews.add(iv);  

        }
        return dotViews;
    }

    @Override
    public List getDisplayView() {
        // TODO Auto-generated method stub

        views = new ArrayList();  

        for(int i = 0; i < pics.length; i++){
            View view=LayoutInflater.from(getApplicationContext()).inflate(R.layout.img, null);
            view.setBackgroundResource(pics[i]);


            views.add(view);  

        }
        return views;

    }


}

方式二:

    mGuidePageView.setData(R.drawable.dot, pics);

其中setData(int resId,int[] pic)的第一个参数是指指示器的源selector资源,第二个参数是指需要展示的若干张图片数组。

2.设置样式

  guidePageViewStyle=mGuidePageView.getGuidePageStyle();
  guidePageViewStyle.setBtnStr("我要进入了");

当然需要记住的是样式设置的代码必须在数据设置的前面,这样才能让设置生效,不然程序会调用默认的设置。
样式包括:字体的背景,颜色,什么字体等等。

3.跳转监听:

    mGuidePageView.setJumpClick(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Intent mIntent=new Intent(GuidePageViewActivity.this,CommonActivity.class);
            startActivity(mIntent);
        }
    });

大概的方法就这么多,GuidePageView的程序比SplashView要相对复杂,花去的时间也较多,在最初的时候会出现卡顿,但是经过慢慢调优才到现在的效果。
该GuidePageView还有很多需要扩展的地方。。。。(比如添加多个动画界面,将导航换成不同的图片,而不是单一的设置等),敬请期待。

邮箱:[email protected]

github:https://github.com/commutescript

欢迎交流,欢迎star。

你可能感兴趣的:(Android框架解析)