先看效果圖
可以看到ViewPager隨內(nèi)容的高度平滑改變总珠。
實(shí)現(xiàn)原理
要實(shí)現(xiàn)ViewPager的高度隨ItemView而變化叙赚,那么在滾動(dòng)前需要獲取到itemView的原始高度痒玩。
然后監(jiān)聽ViewPager的滾動(dòng)過程谨胞,獲取將要展示的下一個(gè)ItemView的高度歇万,根據(jù)橫向滾動(dòng)比例凝颇,實(shí)時(shí)計(jì)算高度。
具體實(shí)現(xiàn)可以參考類DynamicHeightViewPager的createPageTransformer
方法
使用方式
使用方式非常簡單揩瞪,只需要以下幾步:
ViewPager使用
DynamicHeightViewPager
類來代替赋朦,該類相對ViewPager
來說只增加了初始化方法init(dynamicHeightItemViews: List<DynamicHeightViewPagerItemInterface>, selectedItem: Int = 0)
ViewPager的每個(gè)ItemView需要實(shí)現(xiàn)ComplicatedDynamicHeightViewPagerItem接口,該接口中的
getOriginContentHeight
方法需要返回ItemView的原始高度李破,根據(jù)此高度才能動(dòng)態(tài)計(jì)算ViewPager的高度宠哄。ItemView需要繼承FrameLayout
。調(diào)用ViewPager的初始化方法
init(dynamicHeightItemViews: List<DynamicHeightViewPagerItemInterface>, selectedItem: Int = 0)
嗤攻。
具體使用方法可以參考文末的demo毛嫉。
viewPager中每個(gè)Item不會(huì)局限于圖片,可以是其他UI組件妇菱。
當(dāng)每個(gè)Item的子View需要根據(jù)ViewPager高度的變化進(jìn)行縮放時(shí)承粤,可以響應(yīng)ComplicatedDynamicHeightViewPagerItem
的onScaleChanged(scale: Float)
方法。
github地址:https://github.com/HowardChenhaoyang/DynamicHeightViewPager