美文网首页
Android clipToPadding和clipChildr

Android clipToPadding和clipChildr

作者: 路漫漫其修远兮归四方 | 来源:发表于2020-07-12 20:56 被阅读0次

    属性说明

    属性 说明
    android:clipChildren clipChildren表示是否限制子View在其范围内,在animations动画以及APP主界面底部导航栏中发挥很大的作用, 默认情况下,clipChild为true。 也就是不允许进行扩展绘制。那么视图的显示就会受到限制。我们将其值设置为false后,当子控件的高度高于父控件时也会完全显示,而不会被压缩
    android:clipToPadding clipToPadding用来定义ViewGroup是否允许在padding中绘制。默认情况下,cliptopadding被设置为ture, 也就是把padding中的值都进行裁切了,如图片超出边界后被裁剪

    效果展示

    查看android:clipChildren效果

    直接修改android:clipChildren属性的boolean值,就能进行测试

    布局文件
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:clipChildren="false"
        tools:context=".MainActivity">
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:layout_alignParentBottom="true"
            android:background="@color/colorAccent">
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="100dp"
                android:layout_gravity="bottom"
                android:background="@color/colorPrimary"
                android:gravity="center"
                android:text="Hello World!" />
        </LinearLayout>
    
    </RelativeLayout>
    
    android:clipChildren = true android:clipChildren = false
    true.png false.png

    由上图简单得知,我们知道了android:clipChildren 属性的功能。
    总结:
    ①.android:clipChildren默认值为为true,且android:clipChildren属性需要设置在根布局当中,否则不生效。
    ②.需要实现上述效果,子布局的高度需要大于父布局,且他们的高度都是固定的。

    查看clipToPadding效果

    当我们测试clipToPadding属性效果时,我们使用ViewPager写一个简单Demo来进行测试(比较直观)。

    Demo代码
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            ViewPager viewPager = findViewById(R.id.viewPager);
            viewPager.setAdapter(new ViewPagerAdapter());
    
        }
    
        private static class ViewPagerAdapter extends PagerAdapter {
    
            @Override
            public int getCount() {
                return 5;
            }
    
            @NonNull
            @Override
            public Object instantiateItem(@NonNull ViewGroup container, int position) {
                TextView tv = new TextView(container.getContext());
                tv.setGravity(Gravity.CENTER);
                tv.setBackgroundColor(getPosColor(position % 3));
                tv.setTextSize(30);
                tv.setText(String.format("第%d页", position));
                // 添加到ViewPager容器
                container.addView(tv);
                // 返回填充的View对象
                return tv;
            }
    
            @Override
            public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
                return view == object;
            }
    
            @Override
            public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
                container.removeView((View) object);
            }
        }
    
        private static @ColorInt
        int getPosColor(int pos) {
            switch (pos) {
                case 0:
                    return Color.RED;
                case 1:
                    return Color.GREEN;
                case 2:
                    return Color.BLUE;
            }
            return Color.GRAY;
        }
    }
    
    布局文件
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
    
        <androidx.viewpager.widget.ViewPager
            android:id="@+id/viewPager"
            android:clipToPadding="false"
            android:layout_width="match_parent"
            android:layout_height="300dp"
            android:paddingStart="40dp"
            android:paddingEnd="40dp" />
    
    </RelativeLayout>
    
    效果图
    android:clipToPadding = true android:clipToPadding = false
    b.png a.png

    总结:
    正如clipToPadding属性描述所说,cliptopadding为false的时候,允许在padding区域绘制。

    相关文章

      网友评论

          本文标题:Android clipToPadding和clipChildr

          本文链接:https://www.haomeiwen.com/subject/oxencktx.html