本文主要是介绍ViewPager显示左右两边item的一部分,ViewPager显示左右两边的View,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
上图就是效果图,设置起来其实很简单,现在xml文件中进行如下设置:
<androidx.viewpager.widget.ViewPagerandroid:layout_width="match_parent"android:id="@+id/vp_Ad_Container"android:clipToPadding="false"android:paddingLeft="10dp"android:paddingRight="10dp"android:gravity="center_horizontal"android:layout_height="300dp"/>
再在代码中设置margin,特别提示:在xml文件中设置margin无效
//设置边距5dp
mViewPager.setPageMargin( dip2px(5));//dp转px的函数
private int dip2px(int value) {final float scale = getResources().getDisplayMetrics().density;return (int)(value * scale + 0.5f);
}
到这里就设置完成了,下面解释一下原理:
android:clipToPadding此属性表示: 用来定义ViewGroup是否允许在padding中绘制。默认情况下为true,为true的情况下, 那么绘制的区域会把padding部分剪裁。若为false,那么控件的绘制区域包含padding部分。
ViewPager部分源码:
@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {// For simple implementation, our internal size is always 0.// We depend on the container to specify the layout size of// our view. We can't really know what it is since we will be// adding and removing different arbitrary views and do not// want the layout to change as this happens.setMeasuredDimension(getDefaultSize(0, widthMeasureSpec),getDefaultSize(0, heightMeasureSpec));final int measuredWidth = getMeasuredWidth();final int maxGutterSize = measuredWidth / 10;mGutterSize = Math.min(maxGutterSize, mDefaultGutterSize);// Children are just made to fill our space.int childWidthSize = measuredWidth - getPaddingLeft() - getPaddingRight();int childHeightSize = getMeasuredHeight() - getPaddingTop() - getPaddingBottom();
默认情况下,childWidthSize就是页面item的宽度了,等于ViewPager的宽度减去左右Padding。我们给ViewPager设置了左右Padding,页面的宽度就变小了,设置clipToPadding=false,则padding部分可以绘制显示,那么左右的item也就显示出来了。 另外,设置item的间距,viewPager.setPageMargin(dp2px(5)).
api解释一下xml属性:
翻译一下:
这篇关于ViewPager显示左右两边item的一部分,ViewPager显示左右两边的View的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!