ViewPager显示左右两边item的一部分,ViewPager显示左右两边的View

       

ViewPager显示左右两边item的一部分,ViewPager显示左右两边的View_第1张图片

上图就是效果图,设置起来其实很简单,现在xml文件中进行如下设置:

        

再在代码中设置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部分源码:

    @Override
    protected 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_第2张图片

翻译一下:

ViewPager显示左右两边item的一部分,ViewPager显示左右两边的View_第3张图片

你可能感兴趣的:(Android)