viewpager2 是 viewpager 庫的改進版本,可提供增強型功能並解決viewpager的一些問題
viewpager有兩個弊端:(1)不能關閉預載入,(2)更新adapter不生效。
我們在載入資料的時候,viewpager缺省會幫我們預載入前後兩個頁面的資料,但是這兩個view是不可見的,目前viewpager2對fragment支援只能fragmentstateadapter,fragmentstateadapter在遇到預載入時,只會建立fragment物件,不會把fragment真正的加入到布局中,所以自帶懶載入效果。
(1)垂直方向支援,可以通過設定 viewpager2 元素的 android:orientation 屬性為其啟用垂直分頁。
(2)更高效的notifydatasetchanged,在執行時動態修改 fragment 集合,而 viewpager2 會正確顯示修改後的集合。
匯入依賴:
implementation "com.google.android.material:material:1.2.1"
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
xmlns:android
=""=""
xmlns:tools
=""android:layout_width
="match_parent"
android:layout_height
="match_parent"
android:orientation
="vertical"
tools:context
=".mainactivity"
>
android:id
="@+id/tablayout"
android:layout_width
="match_parent"
android:layout_height
="wrap_content"
="fill"
="@android:color/holo_blue_light"
="2dp"
="fixed"
="@android:color/holo_blue_light"
="@android:color/black"
/>
android:id
="@+id/viewpager"
android:layout_width
="match_parent"
android:layout_height
="match_parent"
/>
linearlayout
>
mainactivity
class mainactivity :()
private
funinit()
.attach()
}}
myfragmentstateadapter
class
myfragmentstateadapter
(fragmentactivity: fragmentactivity,
private
val list: list):
fragmentstateadapter
(fragmentactivity)
override
fungetitemcount()
: int
}
fragment切換的動畫
private
const
val min_scale =
0.85f
private
const
val min_alpha =
0.5f
class zoomoutpagetransformer : viewpager2.
pagetransformer
position <=
1->
else
scalex = scalefactor
scaley = scalefactor
alpha =
(min_alpha +((
(scalefactor - min_scale)/(
1- min_scale))*
(1- min_alpha)))
}else
->}}
}}
如果你想實現底部導航欄,用法也差不多
修改xml布局檔案
<?xml version="1.0" encoding="utf-8"?>
xmlns:android
=""=""
xmlns:tools
=""android:layout_width
="match_parent"
android:layout_height
="match_parent"
android:orientation
="vertical"
tools:context
=".mainactivity"
>
android:id
="@+id/view_pager"
android:layout_width
="match_parent"
android:layout_height
="0dp"
android:layout_weight
="1"
/>
android:id
="@+id/tab_layout"
android:layout_width
="match_parent"
android:layout_height
="wrap_content"
="fill"
="@android:color/holo_blue_light"
="2dp"
="fixed"
="@android:color/holo_blue_light"
="@android:color/black"
/>
linearlayout
>
修改activity的**
class bottomactivity :()
private
funinit()
override
funontabunselected
(tab: tablayout.tab?
)override
funontabreselected
(tab: tablayout.tab?)}
) view_pager.isuserinputenabled =
false
//禁用頁面滑動
//tablayout與viewpager2聯動
tablayoutmediator
(tab_layout, view_pager)
.attach()
}}
優雅地使用列舉enum
在開發中,我們可能會遇到這樣的問題 某乙個物件的某些字段比如常見的 的狀態,欄位名字叫 status,在資料庫中儲存的時候存的值一般是數字,比如 0 未處理 1 已處理 2 已取消 在介面展示的時候,我們不可能直接將數字展示,需要將它的實際含義進行對應展示,以前的自己 可能會這樣寫 未處理 已處理已...
SpringBoot如何優雅地使用Swagger2
spring boot 框架是目前非常流行的微服務框架,我們很多情況下使用它來提供 rest api。而對於 rest api 來說很重要的一部分內容就是文件,swagger 為我們提供了一套通過 和註解自動生成文件的方法,這一點對於保證 api 文件的及時性將有很大的幫助。本文將使用 swagge...
前端如何優雅地使用列舉
在前端開發中我們經常遇到這樣一種情況 假設我們要渲染乙個訂單列表,後端返回的資料中包含這樣乙個字段 訂單狀態 orderstatus 0後端可能會告訴我們,它對應後端的這樣一組值 那麼我們在前端如何優雅地把後端所返回的值0轉換成字串已完成呢?這就是本文要討論的問題。為了引出我們的方案,我們先來看乙個...