日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

少年郎,你需要封装好的ViewPager工具类

發布時間:2025/4/16 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 少年郎,你需要封装好的ViewPager工具类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作者:夏至,歡迎轉載,也請保留這段申明,謝謝

blog.csdn.net/u011418943/…

你是否有遇到這樣的問題,每次開發一個新的項目,在 viewpager 這一塊上,總是在做重復的東西,比如app引導頁,輪播圖,viewpager+fragment 的 tab 指示器等等,這些雖然簡單,但卻是每個app都要的,而且很耗時,有沒有每次在寫這個,都很無語的感覺呢?

基于上面這種情況,ViewPagerHelper 就誕生了。ViewPagerHelper 是一個能快速幫你的完成 app引導頁,輪播,和viewpager 指示器的工具,內面內置了常用屬性,滿足你日常對油膩的師姐的一切幻想,解放你的雙手,釋放你的靈魂。。。。。

How to use

這里用的是 jitpack 這個網站,所以:

allprojects {repositories {...maven { url 'https://jitpack.io' }}}123456復制代碼

然后在你的 module 中添加:

compile 'com.github.LillteZheng:ViewPagerHelper:v0.1'1復制代碼

褲子也脫了,那么現在就是看裝逼圖的時候,畢竟這是個看臉的世界。

效果圖

首先,大家最常用到的就是輪播圖了,這里給大家提供了 4 中常用的 Indicator

1、輪播圖

第一個,仿魅族的輪播圖,加底部放大圓點:

這里解釋一下底部圓點放大的原理,其實非常簡單,就是用一個 shade,里面配置成 圓點,然后在代碼中去設置透明度和放大縮小,就是這么簡單;小伙伴們可以先按照這個思路自己做一下,或者可以下載代碼驗證一下。

第二個,現在比較流行的弧形圖片

這個是比較流行的,像淘寶,京東這些,都用了這個;這個弧形imageview 呢,也很簡單,相信學習過拋物線大神的自定義專欄,這個馬上就能想到了用什么方法了;沒錯,就是用 BitmapShader,對圖片進行裁剪,所以,我們可以用 path 把要繪制的形狀弄出來,再用 BitmapShader 對圖片進行裁剪即可。

如果你要使用弧形圖片,可以用 ArcImageView 這個控件,可以這樣配置:

<!--弧形圖片,arc_height 為弧度的高度--><com.zhengsr.viewpagerlib.view.ArcImageViewandroid:id="@+id/arc_icon"android:layout_width="match_parent"android:layout_height="match_parent"app:arc_height="15dp"android:scaleType="centerCrop"/>1234567復制代碼

第三個,底部指示器是移動的,看起來比較舒服

TransIndicator 提供了兩種,一個是如圖的橢圓形,還是就是圓點,可以選擇自己喜歡的。它的原理呢,其實也不難,就是先寫好4個小圓條,然后再繪制白色的圓條,再根據 viewpager 的 onPageScrolled 獲取距離的變化,改變 canvas.translate 的繪制位置即可。

第四個,底部指示器文字版本

有些 app 也用文字的方式,這里也提供了一種,文字外面的圓圈可以取消。顏色什么的自行定義。

輪播功能配置

那么,想要使用上面那幾個樣式配置呢?很簡單,你需要三步:
step1:

配置數據,這里把 url 或者本地的 resid 的封裝到list中,因為我們一般是解析了gson之后,獲取圖片和文字說明的,所以,這里就用 list 吧。

List<LoopBean> loopBeens = new ArrayList<>();for (int i = 0; i < TEXT.length; i++) {LoopBean bean = new LoopBean();bean.url = RESURL[i];bean.text = TEXT[i];loopBeens.add(bean);}12345678復制代碼

step2:
配置PageBean,這里主要是為了viewpager的指示器的作用,注意記得寫上泛型.這里為上面的LoopBean,如果你只是 String,就上鞋 url,如果是res,就協商 integer。

PageBean bean = new PageBean.Builder<LoopBean>().setDataObjects(loopBeens).setIndicator(zoomIndicator).builder();1234復制代碼

設置viewpager的動畫,這里提供了三種,分別是MzTransformer,ZoomOutPageTransformer, 和DepthPageTransformer,前者會魅族商城的方式,后者為 google 提供默認的兩種動畫,可以體驗一下,這里可有可無,這里我設置了魅族的效果,這樣加上弧形的圖片更好看。

mBannerCountViewPager.setPageTransformer(false,new MzTransformer());1復制代碼

step3:

view 的接口提供出來,供大家自行配置,這樣的好處在于,實用性更高,你可以添加gif,或者視頻,或者簡單的圖片,記得寫上 layout 文件。

mBannerCountViewPager.setPagerListener(bean, R.layout.loop_layout, new PageHelperListener() {@Overridepublic 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 來設置,或者圖片的更新等等}});1234567891011121314151617復制代碼

xml的配置,其實就是一個viewpager 加一個 linearlayout,位置你自己去擺放

<com.zhengsr.viewpagerlib.view.BannerViewPagerandroid:id="@+id/loop_viewpager_arc"android:layout_width="match_parent"android:layout_height="200dp"android:layout_marginLeft="20dp"android:layout_marginRight="20dp"android:clipChildren="false"zsr:isloop="false"zsr:switchtime="600" /><com.zhengsr.viewpagerlib.indicator.ZoomIndicatorandroid:id="@+id/bottom_zoom_arc"android:layout_width="match_parent"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" />123456789101112131415161718192021復制代碼

這樣就完成了輪播功能,是不是封裝之后,媽媽再也不用擔心我寫輪播效果了呢

2、Tab指示器

說完輪播圖,再說說 viewpager + fragment 這種更加常用的方式, 這里也提供了三種比較常用的樣式。

第一種,無恥抄襲鴻洋大神的三角形版本

其實你會了輪播圖的移動版本,那么這個對你來說,就是 a piece of cake。所以,就不解釋啦

第二種,條形狀的版本

沒啥好說的,就是把上面的三角形改成條狀的,機智如我,代碼全靠抄!!!!果然一個項目的質量,取決于你復制粘貼的技巧!!

第三種,文字顏色漸變的方式


像我們常用的今日頭條,就是用這種方式,而它的原理也是非常簡單,就是用額 clipRect 這個屬性,先繪制一遍正常顏色的,再繪制一遍其他顏色的,就可以了。我建議你先自己用 clipRect 試一下不同的顏色,再自己寫一下,你會發現,臥槽,這么簡單的。。。。。

這里的配置就更簡單了,viewpager 就是普通的,關鍵就是這個 TabIndicator 了,因為我把這三種效果都裝進去了.

三角形的xml

<com.zhengsr.viewpagerlib.indicator.TabIndicatorandroid: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>1234567891011121314151617復制代碼

可以看到你可以設置的它大小,里面的textview 的顏色變化,是否顯示,和可視個數,如果你想改成圓條的,把 tab_type=”tri” 的 tri 改成 rect 即可,然后如果想使用 textview 顏色變化的,只需要把 tab_text_type=”normaltext” 中的 normaltext 改成 colortext 即可。

然后在代碼中這樣配置:

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

這樣,一個比較好用的viewpager 加指示器的方式就完成了。

app 首次啟動引導頁

還有就是引導頁了,這樣跟 輪播圖的配置差不多,因為用的也是那幾個指示器。先看效果:

這里提供了三種樣式,其實還有個文字,不沒貼出來了,可以看輪播的;
引導圖的配置非常簡單,取一個底部為放大的來說:

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();// 把數據添加到 viewpager中,并把view提供出來,這樣除了方便調試,也不會出現一個view,多個// parent的問題,這里在輪播圖比較明顯viewPager.setPagerListener(bean, R.layout.image_layout, new PagerHelperListener() {@Overridepublic void getItemView(View view, Object data) {//通過獲取到這個view,你可以隨意定制你的內容ImageView imageView = view.findViewById(R.id.icon);imageView.setImageResource((Integer) data);}});12345678910111213141516171819202122232425262728復制代碼

這里可以看到,我把 view 提供出來,供大家自行配置,這樣的好處在于,實用性更高,你可以添加gif,或者視頻,或者簡單的圖片。
xml 的配置如下:

<com.zhengsr.viewpagerlib.view.GlideViewPagerandroid:id="@+id/splase_viewpager"android:layout_width="match_parent"android:layout_height="match_parent"/><Buttonandroid: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.ZoomIndicatorandroid: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"/>1234567891011121314151617181920212223242526272829303132復制代碼

這樣就基本講完了,雖然不難,確實經常用到的,封裝起來,總比做無用功來得好。
奉上 github 鏈接:github.com/LillteZheng… 里面有一些自定義屬性的說明。

如果你有想要的效果,而本項目中沒有的,你可以在 issue 中提出來,作者看到了,會抽空去實現的,如果有發現問題了或者需要提供哪些接口出來,也可以在 issue 中提出來。當然,喜歡請 start 或 fork 來一波。
代碼是最好的老師,可以download,改成自己喜歡的。?

轉載于:https://juejin.im/post/5a09007b5188253d681712ed

總結

以上是生活随笔為你收集整理的少年郎,你需要封装好的ViewPager工具类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。