android clipChildrenとclipToPadding


clipChildren
参照先:http://www.2cto.com/kf/201608/537822.html実現機能:1.下部ナビゲーションバーのアイコン2.viewpager 1画面複数画面表示android clipChildren与clipToPadding_第1张图片
android clipChildren与clipToPadding_第2张图片
実装方法:
1.下のナビゲーションバーのアイコン
注意:ルートノードandroid:clipChildren="false"に配置する必要があります

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_clip_children"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clipChildren="false"
    tools:context="com.sign.viewpagerdemo.ClipChildrenActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:layout_alignParentBottom="true"
        android:background="#e7d321"
        android:orientation="horizontal">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:scaleType="fitCenter"
            android:src="@mipmap/ic_launcher" />

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:scaleType="fitCenter"
            android:src="@mipmap/ic_launcher" />

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="90dp"
            android:layout_gravity="bottom"
            android:layout_weight="1"
            android:scaleType="fitCenter"
            android:src="@mipmap/ic_launcher" />

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:scaleType="fitCenter"
            android:src="@mipmap/ic_launcher" />

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:scaleType="fitCenter"
            android:src="@mipmap/ic_launcher" />
    LinearLayout>
RelativeLayout>

2.viewpager 1画面複数画面表示
  • 親レイアウトにはandroid:clipChildren="false"
  • が必要です.
  • ViewPager幅android:layout_width="match_parent"
  • margin android:layout_marginLeft="80dp" android:layout_marginRight="80dp"
  • を設置する.
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/activity_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context="com.sign.viewpagerdemo.MainActivity">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="200dp"
            android:clipChildren="false"
            android:gravity="center">
    
            <android.support.v4.view.ViewPager
                android:id="@+id/viewpager3"
                android:layout_width="match_parent"
                android:layout_height="200dp"
                android:layout_marginLeft="80dp"
                android:layout_marginRight="80dp"
                android:clipChildren="false" />
        LinearLayout>
    
    LinearLayout>
    

    注意:この方法にはバグがあります.真ん中のViewしかスライドできませんが、左か右のViewをクリックしてスライドしたい場合はどうすればいいですか.
    解決策:親のtouchイベントをviewPagerに配布します.linearLayoutはView Pagerコントロールの親コンテナです.
    linearLayout.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    return viewPager.dispatchTouchEvent(event);
                }
            });

    clipToPadding
    ListView、ScrollView、GridViewにpaddingTopまたはpaddingBottomを設定すると、上部と下部にスライドするとデフォルトでpadding/marginがスライド中にずっと存在し、viewは常に最下部と最上部にスライドできず、違和感があることがわかります.次の図では、左右のrecyclerviewにpaddingtopが設定されており、左側のclipToPaddingプロパティは設定されていません(デフォルトはtrue)、右側の設定clipToPaddingにfalse android clipChildren与clipToPadding_第3张图片が設定されています.