項目中遇到一個需求:ViewPager 一屏顯示多個子頁面。由於以前沒有作過這樣的界面,因此經歷了些許小插曲,特以記之!android
主要內容來自: http://blog.csdn.net/JM_beizi/article/details/51297605git
經過查詢資料,發現有兩種解決方案:github
PagerAdapter.getPageWidth(int position)
方法android:clipChildren="false"
這個屬性PagerAdapter相關源碼:緩存
/** * Returns the proportional width of a given page as a percentage of the * ViewPager's measured width from (0.f-1.f] * * @param position The position of the page requested * @return Proportional width for the given page position */ public float getPageWidth(int position) { return 1.f; }
配置 ViewPager 和其父佈局的 android:clipChildren
屬性爲 false佈局
android:clipChildren
表示是否限制子 View 在其範圍內,默認爲 true。.net
代碼中經過 setClipChildren(false)
方法設置。code
特別注意:xml
setClipChildren(false)
在 3.0 以上版本中,開啓了硬件加速後將不能正常工做,因此須要將其設置爲軟件加速。設置軟硬件加速使用setLayerType(View.LAYER_TYPE_SOFTWARE, null)
; 也能夠在佈局文件中添加android:layerType="software"
- 經過設置 ViewPager 的
layout_marginLeft
和layout_marginLeft
兩個屬性,能夠設置其餘頁面(非當前頁面)的顯示大小
<RelativeLayout android:id="@+id/viewPager_container" android:layout_width="match_parent" android:layout_height="200dp" android:background="@android:color/white" android:clipChildren="false" android:layerType="software"> <android.support.v4.view.ViewPager android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginLeft="110dp" android:layout_marginRight="110dp" android:clipChildren="false" /> </RelativeLayout>
mViewPager.setOffscreenPageLimit(2); // 2 表示除了當前頁面,再緩存其餘兩個頁面
mViewPager.setPageMargin(int marginPixls); // setPageMargin表示設置page之間的間距
blog
以下事項來自參考文章的評論區:事件
使用過程當中,第二個問題未重現!
此文在個人 Github Pages 上同步發佈,地址爲:{{ title }}