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

       

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

        <androidx.viewpager.widget.ViewPager
            android: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部分源码:

    @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属性:

翻译一下:

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值