如何将线性布局的背景图片居中裁剪?

3 人关注

我需要用recyclerview做一个卡片式的布局,所以我设置了一个图像作为线性布局的背景,但现在我无法将该图像居中裁剪。 我的问题是,我不能使用imageview,因为使用它,卡片的高度也会增加,我不希望这样,所以如果有人能帮助我,请帮帮我。 我的xml

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/primary_card"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="19dp"
    android:layout_marginRight="19dp"
    android:layout_marginTop="15dp"
    app:cardCornerRadius="115dp">
    <ImageView
        android:id="@+id/background_image_layout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"
        android:visibility="gone" />
    <LinearLayout
        android:id="@+id/background_image"
        android:layout_width="match_parent"
        android:layout_height="210dp"
        android:background="@drawable/club1"
        android:orientation="vertical"
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
            <de.hdodenhof.circleimageview.CircleImageView
                android:id="@+id/profile_image"
                android:layout_width="56dp"
                android:layout_height="56dp"
                android:layout_marginLeft="10dp"
                android:layout_marginTop="20dp"
                android:src="@drawable/ellipse" />
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical">
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal"
                    android:padding="5dp">
                    <com.ct.listrtrial.Custom.CustomTextViewMedium
                        android:id="@+id/first_text"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="18dp"
                        android:padding="5dp"
                        android:text="John Doe"
                        android:textColor="@color/White"
                        android:textSize="15sp" />
                    <com.ct.listrtrial.Custom.CustomTextViewMedium
                        android:id="@+id/second_text"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="18dp"
                        android:padding="5dp"
                        android:text="checked in to"
                        android:textColor="@color/White"
                        android:textSize="10sp" />
                    <com.ct.listrtrial.Custom.CustomTextViewMedium
                        android:id="@+id/third_text"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="18dp"
                        android:padding="5dp"
                        android:text="W south"
                        android:textColor="@color/White"
                        android:textSize="15sp" />
                </LinearLayout>
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="10dp"
                    android:orientation="horizontal">
                    <com.ct.listrtrial.Custom.CustomTextViewMedium
                        android:id="@+id/fourth_text"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginRight="9dp"
                        android:text="beach mumbai"
                        android:textColor="@color/White"
                        android:textSize="15sp" />
                    <com.ct.listrtrial.Custom.CustomTextViewMedium
                        android:id="@+id/fifth_text"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_below="@+id/second_text"
                        android:layout_toRightOf="@+id/fourth_text"
                        android:text="30 mins ago."
                        android:textColor="@color/White"
                        android:textSize="10sp" />
                </LinearLayout>
            </LinearLayout>
        </LinearLayout>
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="85dp">
            <com.ct.listrtrial.Custom.CustomTextViewMedium
                android:id="@+id/sixth_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:layout_centerInParent="true"
                android:padding="10dp"
                android:text="reply to abc............"
                android:textColor="@color/White" />
            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:layout_centerInParent="true">
                <ImageView
                    android:id="@+id/favourite_image"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginRight="5dp"
                    android:adjustViewBounds="true"
                    android:scaleType="fitXY"
                    android:src="@drawable/ic_favorite_border_black_24dp" />
                <com.ct.listrtrial.Custom.CustomTextViewMedium
                    android:id="@+id/seventh_text"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginRight="15dp"
                    android:text="40 likes"
                    android:textColor="@color/White" />
            </LinearLayout>
        </RelativeLayout>
    </LinearLayout>
</android.support.v7.widget.CardView>
    
5 个评论
在线性布局中使用边距
但我想将线性布局的图像居中裁剪。
使用另一个线性布局作为父级,并使用padding。对于背景,你不能使用这些图像属性。
但即使我使用另一种线性布局的填充,也不能解决裁剪的问题。
你能把你所期望的和你得到的截图贴出来吗?
java
android
user-interface
user9550968
user9550968
发布于 2018-04-28
4 个回答
Deven
Deven
发布于 2019-08-03
已采纳
0 人赞同

你不能对线性布局的背景图片进行中心裁剪。 但你可以通过这些改变来实现同样的效果。

  • Replace you LinearLayout with RelativeLayout
  • 将一个ImageView作为第一个孩子放在相对布局中,并使用属性进行中心裁剪。

    <RelativeLayout
    android:id="@+id/background_image"
    android:layout_width="match_parent"
    android:layout_height="210dp"
    android:orientation="vertical">
        <ImageView
        android:scaleType="centerCrop"
        android:src="@drawable/club1"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    .....
    ......
    </RelativeLayout>
        
  • Elsunhoty
    Elsunhoty
    发布于 2019-08-03
    0 人赞同

    如果你想控制图像视图的比例

    你需要把它放在ImageView As Src Not Background中。

    你可以使用框架布局来实现它

    <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/primary_card"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="19dp"
        android:layout_marginRight="19dp"
        android:layout_marginTop="15dp"
        app:cardCornerRadius="115dp">
        <ImageView
            android:id="@+id/background_image_layout"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:adjustViewBounds="true"
            android:visibility="gone" />
        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="210dp">
            <ImageView
                android:layout_width="match_parent"
                android:src="@mipmap/ic_launcher"
                android:layout_height="match_parent" />
            <LinearLayout
                android:id="@+id/background_image"
                android:layout_width="match_parent"
                android:layout_height="210dp"
                android:orientation="vertical"
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal">
                    <ImageView
                        android:id="@+id/profile_image"
                        android:layout_width="56dp"
                        android:layout_height="56dp"
                        android:layout_marginLeft="10dp"
                        android:layout_marginTop="20dp"
                        android:src="@drawable/playstore_icon" />
                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:orientation="vertical">
                        <LinearLayout
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:orientation="horizontal"
                            android:padding="5dp">
                            <TextView
                                android:id="@+id/first_text"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:layout_marginTop="18dp"
                                android:padding="5dp"
                                android:text="John Doe"
                                android:textSize="15sp" />
                            <TextView
                                android:id="@+id/second_text"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:layout_marginTop="18dp"
                                android:padding="5dp"
                                android:text="checked in to"
                                android:textSize="10sp" />
                            <TextView
                                android:id="@+id/third_text"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:layout_marginTop="18dp"
                                android:padding="5dp"
                                android:text="W south"
                                android:textSize="15sp" />
                        </LinearLayout>
                        <LinearLayout
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:layout_marginLeft="10dp"
                            android:orientation="horizontal">
                            <TextView
                                android:id="@+id/fourth_text"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:layout_marginRight="9dp"
                                android:text="beach mumbai"
                                android:textSize="15sp" />
                            <TextView
                                android:id="@+id/fifth_text"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:layout_below="@+id/second_text"
                                android:layout_toRightOf="@+id/fourth_text"
                                android:text="30 mins ago."
                                android:textSize="10sp" />
                        </LinearLayout>
                    </LinearLayout>
                </LinearLayout>
                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="85dp">
                    <TextView
                        android:id="@+id/sixth_text"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignParentLeft="true"
                        android:layout_centerInParent="true"
                        android:padding="10dp"
                        android:text="reply to abc............"
                        android:textColor="@color/white" />
                    <LinearLayout
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignParentRight="true"
                        android:layout_centerInParent="true">
                        <ImageView
                            android:id="@+id/favourite_image"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_marginRight="5dp"
                            android:adjustViewBounds="true"
                            android:scaleType="fitXY"
                            android:src="@drawable/ic_close" />
                        <TextView
                            android:id="@+id/seventh_text"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_marginRight="15dp"
                            android:text="40 likes"
                            android:textColor="@color/white" />
                    </LinearLayout>
                </RelativeLayout>
            </LinearLayout>
        </FrameLayout>
    </android.support.v7.widget.CardView>
        
    Miha_x64
    Miha_x64
    发布于 2019-08-03
    0 人赞同

    CenterCrop的逻辑是在 ImageView 里面烘托出来的。正确的解决方案是将其提取到 一个可画性 包裹另一个Drawable并对其进行居中裁剪。

    Dyno Cris
    Dyno Cris
    发布于 2019-08-03
    0 人赞同

    如果你使用CoordinatorLayout,那么只需将你的ImageView与CenterCrop参数放在顶部。

    <CoordinatorLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ImageView
        android:scaleType="centerCrop"
        android:background="@drawable/background_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    <AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/transparent"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        app:elevation="0dp">
        <include layout="@layout/header_main" />
        <TabLayout
            android:id="@+id/tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:tabIndicatorColor="@android:color/white"
            android:background="@drawable/white_border_background"
            app:tabIndicatorHeight="3dp"/>
    </AppBarLayout>
    <ViewPager
        android:id="@+id/view_pager"