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

时间:2018-04-28 07:17:29

标签: java android user-interface

嗨我必须使用带有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 个答案:

答案 0 :(得分:1)

如果您想控制图像视图比例

你需要把它放在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>

答案 1 :(得分:1)

您无法裁剪线性布局的背景图像, 但是你可以使用这些变化来实现同样的目标:

  1. 将LinearLayout替换为RelativeLayout
  2. 将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>
    

答案 2 :(得分:0)

如果使用CoordinatorLayout,则只需将带有centerCrop参数的ImageView放在顶部。

<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"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</CoordinatorLayout>

答案 3 :(得分:0)

是的,您可以为任何视图裁剪背景。 我为此目的使用Glide。 看看我的扩展功能。

fun View.setBackgroundImage(link: String) =
    this.post {
        Glide.with(this.context)
                .load(link)
                .apply(RequestOptions().override(this.width,
                        this.height).centerCrop())
                .into(CustomTarget {
                    this.background = it
                })
    }

如果要从项目中添加图像资源-只需使用它而不是链接即可。

这是我的 CustomTarget

class CustomTarget(private val drawable: (Drawable?) -> Unit) : SimpleTarget<Drawable>() {
override fun onResourceReady(resource: Drawable?, transition: Transition<in Drawable>?) {
    drawable.invoke(resource)
}}

答案 4 :(得分:0)

CenterCrop 逻辑在 ImageView 中烘焙。正确的解决方案是将其提取到 a Drawable 中,后者包装了另一个 Drawable 并居中裁剪它。