ViewPager-你需要知道的使用場景封裝

前言

你是否有遇到這樣的問題芥吟,每次開發(fā)一個新的項目澎灸,在 viewpager 這一塊上蛹头,總是在做重復的東西顿肺,比如app引導頁戏溺,輪播圖, viewpager+fragment 的 tab 指示器等等屠尊,這些雖然簡單旷祸,但卻是每個app都要的,而且很耗時讼昆,有沒有每次在寫這個托享,都很無語的感覺呢?
基于上面這種情況浸赫,推薦給大家一個第三方開源框架ViewPagerHelper,ViewPagerHelper 是一個能快速幫你的完成 app引導頁闰围,輪播,和viewpager 指示器的工具既峡, 內面內置了常用屬性羡榴,滿足你日常對油膩的師姐的一切幻想,解放你的雙手运敢,釋放你的靈魂傳送門

在app引導頁使用

1.xml文件配置 你可以通過在xml文件中設置不同的指示器從而達到不同的效果,我這以ZoomIndicator為 例

  <com.zhengsr.viewpagerlib.view.GlideViewPager
    android:id="@+id/splase_viewpager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

<Button
    android:id="@+id/splase_start_btn"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_marginLeft="100dp"
    android:layout_marginRight="100dp"
    android:layout_marginBottom="50dp"
    android:background="@drawable/glide_bottom_btn_bg"
    android:textColor="@color/white"
    android:text="@string/start"
    android:textSize="18sp"
    android:visibility="gone"
    />

 <com.zhengsr.viewpagerlib.indicator.ZoomIndicator
    android:id="@+id/splase_bottom_layout"
    android:layout_alignParentBottom="true"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:gravity="center"
    zsr:zoom_selector="@drawable/bottom_circle"
    zsr:zoom_leftmargin="10dp"
    zsr:zoom_max="1.5"
    zsr:zoom_alpha_min="0.4"
    zsr:zoom_dismiss_open="true"
    android:orientation="horizontal"/>

2.代碼中做如下配置

    GlideViewPager viewPager = (GlideViewPager) findViewById(R.id.splase_viewpager);
    ZoomIndicator zoomIndicator = (ZoomIndicator) findViewById(R.id.splase_bottom_layout);
    Button button = (Button) findViewById(R.id.splase_start_btn);


    //先把本地的圖片 id 裝進 list 容器中
    List<Integer> images = new ArrayList<>();
    for (int i = 0; i < RES.length; i++) {
        images.add(RES[i]);

    }
    //配置pagerbean校仑,這里主要是為了viewpager的指示器的作用,注意記得寫上泛型
    PagerBean bean = new PagerBean.Builder<Integer>()
            .setDataObjects(images)
            .setIndicator(zoomIndicator)
            .setOpenView(button)
            .builder();

    // 把數(shù)據(jù)添加到 viewpager中传惠,并把view提供出來迄沫,這樣除了方便調試,也不會出現(xiàn)一個view卦方,多個
    // parent的問題羊瘩,這里在輪播圖比較明顯
    viewPager.setPagerListener(bean, R.layout.image_layout, new PagerHelperListener() {
        @Override
        public void getItemView(View view, Object data) {
            //通過獲取到這個view,你可以隨意定制你的內容
            ImageView imageView = view.findViewById(R.id.icon);
            imageView.setImageResource((Integer) data);
        }
    });

實現(xiàn)效果:
圖片待上傳...
以上是設置了不同指示器的效果

做輪播圖使用

1.xml文件配置,其實就是一個viewpager 加一個 linearlayout愿汰,位置你自己去擺放

  <com.zhengsr.viewpagerlib.view.BannerViewPager
            android:id="@+id/loop_viewpager"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="20dp"
            android:clipChildren="false"
            zsr:banner_isloop="true"
            zsr:banner_looptime="3000"
            zsr:banner_switchtime="600" />

        <com.zhengsr.viewpagerlib.indicator.ZoomIndicator
            android:id="@+id/bottom_scale_layout"
            android:layout_width="wrap_content"
            android:layout_height="30dp"
            android:layout_gravity="bottom|right"
            android:layout_marginRight="20dp"
            android:gravity="center"
            zsr:zoom_alpha_min="0.5"
            zsr:zoom_leftmargin="10dp"
            zsr:zoom_max="1.5"
            zsr:zoom_selector="@drawable/bottom_circle" />

2.在代碼中設置

//設置viewpager的動畫(可不設)困后,這里提供了三種,分別是MzTransformer衬廷,ZoomOutPageTransformer,        
  和DepthPageTransformer摇予,可以體驗一下,這里可有可無,這里我設置了魅族的效果吗跋,這樣加上弧形的圖      
  片更好看侧戴。
mBannerCountViewPager.setPageTransformer(false,new MzTransformer());
mBannerCountViewPager.setPagerListener(bean, R.layout.loop_layout, new PageHelperListener() {
        @Override
        public void getItemView(View view, Object data) {
            ImageView imageView = view.findViewById(R.id.loop_icon);
            LoopBean bean = (LoopBean) data;
            new GlideManager.Builder()
                    .setContext(LoopActivity.this)
                    .setImgSource(bean.url)
                    .setLoadingBitmap(R.mipmap.ic_launcher)
                    .setImageView(imageView)
                    .builder();
            TextView textView = view.findViewById(R.id.loop_text);
            textView.setText(bean.text);

            //如若你要設置點擊事件,也可以直接通過這個view 來設置跌宛,或者圖片的更新等等
        }
    });

實現(xiàn)效果:
圖片待上傳...

做Tab配合ViewPager使用

1.xml配置

//你可以通過這些屬性酗宋,自由配置三角形,條狀疆拘,或者只使用文字顏色變化蜕猫,自定義屬性的名字跟它的功能一樣。
<com.zhengsr.viewpagerlib.indicator.TabIndicator
    android:id="@+id/line_indicator"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:background="@color/black_ff"
    app:tab_color="@color/white"
    app:tab_width="25dp"
    app:tab_height="5dp"
    app:tab_text_default_color="@color/white_ff"
    app:tab_text_change_color="@color/white"
    app:tab_show="true"
    app:tab_text_type="normaltext"
    app:tab_textsize="16sp"
    app:visiabel_size="3"
    app:tap_type="tri"
    >
</com.zhengsr.viewpagerlib.indicator.TabIndicator>

<android.support.v4.view.ViewPager
    android:id="@+id/vp"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

2.代碼中設置

 /**
 * 把 TabIndicator 跟viewpager關聯(lián)起來
 */
TabIndicator tabIndecator = (TabIndicator) findViewById(R.id.line_indicator);
// 設置 viewpager的切換速度哎迄,這樣點擊的時候比較自然
tabIndecator.setViewPagerSwitchSpeed(viewPager,600);
tabIndecator.setTabData(viewPager,mTitle, new TabIndicator.TabClickListener() {
    @Override
    public void onClick(int position) {
        //頂部點擊的方法公布出來
        viewPager.setCurrentItem(position);
    }
});

這樣回右,一個比較好用的viewpager 加指示器的方式就完成了隆圆。
實現(xiàn)效果:
圖片待上傳...

最后,將自己寫的Demo放上來

下面可以看一下自定義的屬性,方便大家在用的時候調用:

一些自定義屬性:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <!--放大縮小的 indicator-->
    <declare-styleable name="ZoomIndicator">
        <attr name="zoom_selector" format="reference"/> <!--selecotr翔烁,一般就一個圓點即可-->
        <attr name="zoom_leftmargin" format="dimension"/><!--兩個圓點之間的間距-->
        <attr name="zoom_max" format="float"/> <!--小圓點放大的倍數(shù)-->
        <attr name="zoom_alpha_min" format="float"/><!--小圓點縮小的倍數(shù)-->
        <attr name="zoom_dismiss_open" format="boolean"/><!--做引導頁的最后一頁渺氧,是否隱藏圓點-->
    </declare-styleable>

    <!--與上面同理-->
    <declare-styleable name="NormalIndicator">
        <attr name="normal_selector" format="reference"/>
        <attr name="normal_leftmargin" format="dimension"/>
        <attr name="normal_dismiss_open" format="boolean"/>
    </declare-styleable>

    <!--移動indicator indicator-->
    <declare-styleable name="TransIndicator">
        <attr name="trans_width" format="dimension"/> <!--指示器的大小-->
        <attr name="trans_height" format="dimension"/> <!--指示器的大小-->
        <attr name="trans_defaultcolor" format="color|reference"/> <!--指示器默認的顏色-->
        <attr name="trans_leftmargin" format="dimension"/>
        <attr name="trans_movecolor" format="color|reference"/> <!--指示器移動的顏色-->
        <attr name="trans_dismiss_open" format="boolean"/>
        <attr name="trans_round_radius" format="dimension"/>
        <attr name="trans_type">
            <enum name="circle" value="0"/>
            <enum name="round" value="1"/>
        </attr>
    </declare-styleable>

    <!--文字indicator-->
    <declare-styleable name="TextIndicator">
        <attr name="word_show_circle" format="boolean"/> <!--是否顯示外援的圓圈-->
        <attr name="word_circle_color" format="reference"/> <!--圓圈的顏色-->
        <attr name="word_text_color" format="reference"/> <!--文字顏色-->
        <attr name="word_text_size" format="dimension"/> <!--文字大小-->
    </declare-styleable>

    <!--輪播控件的屬性-->
    <declare-styleable name="BannerViewPager">
        <attr name="banner_isloop" format="boolean"/> <!--是否自動輪播-->
        <attr name="banner_looptime" format="integer"/> <!--自動輪播的時間-->
        <attr name="banner_switchtime" format="integer"/> <!--輪播時,viewpager的切換速度-->
    </declare-styleable>

    <!--弧形圖片-->
    <declare-styleable name="ArcImageView">
        <attr name="arc_height" format="dimension"/> <!--弧度的高度-->
    </declare-styleable>

    <!--頂部viewpager指示器-->
    <declare-styleable name="TabIndicator">
        <attr name="visiabel_size" format="integer"/> <!--可視化個數(shù)蹬屹,比如有一排侣背,我們就只要顯示4個-->
        <attr name="tab_color" format="color|reference"/> <!--指示器的顏色-->
        <attr name="tab_width" format="dimension"/>  <!--指示器的寬度-->
        <attr name="tab_height" format="dimension"/> <!--指示器的高度-->
        <attr name="tab_textsize" format="dimension"/> <!--頂部文字的大小-->
        <attr name="tab_text_default_color" format="color|reference"/> <!--頂部文字默認的顏色-->
        <attr name="tab_text_change_color" format="color|reference"/> <!--移動時,頂部文字的顏色-->
        <attr name="tab_show" format="boolean"/>  <!--是否顯示指示器-->
        <attr name="tab_text_type">               <!--頂部文字的類型慨默,nromaltext為普通的textview贩耐,
                                                       corlortext為文件漸變-->
            <enum name="normaltext" value="0"/>
            <enum name="colortext" value="1"/>
        </attr>
        <attr name="tap_type" >           <!--指示器類型,有三角形或者圓條-->
            <enum name="tri" value="0"/>
            <enum name="rect" value="1"/>
        </attr>
    </declare-styleable>

    <!--文件漸變屬性-->
    <declare-styleable name="ColorTextView">
        <attr name="colortext_size" format="dimension"/>
        <attr name="colortext_default_color" format="color|reference"/> <!--默認顏色-->
        <attr name="colortext_change_color" format="color|reference"/> <!--漸變顏色-->
    </declare-styleable></resources>
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末业筏,一起剝皮案震驚了整個濱河市憔杨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蒜胖,老刑警劉巖消别,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異台谢,居然都是意外死亡寻狂,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門朋沮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蛇券,“玉大人雳灾,你說我怎么就攤上這事斩芭。” “怎么了皂吮?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵筋夏,是天一觀的道長蒂胞。 經(jīng)常有香客問我,道長条篷,這世上最難降的妖魔是什么骗随? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮赴叹,結果婚禮上鸿染,老公的妹妹穿的比我還像新娘。我一直安慰自己乞巧,他們只是感情好涨椒,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般丢烘。 火紅的嫁衣襯著肌膚如雪柱宦。 梳的紋絲不亂的頭發(fā)上些椒,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天播瞳,我揣著相機與錄音,去河邊找鬼免糕。 笑死赢乓,一個胖子當著我的面吹牛,可吹牛的內容都是我干的石窑。 我是一名探鬼主播牌芋,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼松逊!你這毒婦竟也來了躺屁?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤经宏,失蹤者是張志新(化名)和其女友劉穎犀暑,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體烁兰,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡耐亏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了沪斟。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片广辰。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖主之,靈堂內的尸體忽然破棺而出择吊,到底是詐尸還是另有隱情,我是刑警寧澤槽奕,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布几睛,位于F島的核電站,受9級特大地震影響史翘,放射性物質發(fā)生泄漏枉长。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一琼讽、第九天 我趴在偏房一處隱蔽的房頂上張望必峰。 院中可真熱鬧,春花似錦钻蹬、人聲如沸吼蚁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肝匆。三九已至粒蜈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間旗国,已是汗流浹背枯怖。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留能曾,地道東北人度硝。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像寿冕,于是被迫代替她去往敵國和親蕊程。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內容