GuidePageView的用法及源碼解析

YFAndroidLibs之GuidePageView的用法及源碼解析

關於(About)

GuidePageView故名思意,是指第一次進入應用時的導航頁,效果圖如下:

這裏寫圖片描述
這裏寫圖片描述

設計思路及主要接口(Features)

主要的技術點有:

1.自定義抽樣類:GuideAdapter

public abstract class GuideAdapter {

    private GuidePageView mGuidePageView;

    public abstract List<View> getIndicator();

    public abstract List<View> 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

在佈局文件中添加

 <com.example.yf_library.guidepage.GuidePageView
    android:id="@+id/gp_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    />

代碼設置:

1.在代碼中設置數據:

方式一:

    mGuidePageView.setAdapter(new CustomGuideAdapter());

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

    class CustomGuideAdapter extends GuideAdapter{

    @Override
    public List<View> getIndicator() {

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

        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<View> getDisplayView() {
        // TODO Auto-generated method stub

        views = new ArrayList<View>();  

        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。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章