相当于ImageView scaleType'centerCrop'到位图可绘制引力

M. *_*tte 36 android drawable android-layout

我创建了一个带有标题图像的活动.此标头图像最初使用ImageView在Activity的布局xml中创建,其中scaleType设置为centerCrop.这就是我想要的,它使图像居中,在纵向模式下左右剪切,以横向模式显示所有图像.

<LinearLayout 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:paddingTop="30dp"
    android:paddingBottom="6dp"
    android:paddingLeft="6dp"
    android:paddingRight="6dp"
    android:background="#919EAC"
    android:orientation="vertical" >

<ImageView
    android:id="@+id/header_image"
    android:layout_width="match_parent"
    android:layout_height="120dp"
    android:contentDescription="@string/header_description"
    android:scaleType="centerCrop"
    android:src="@drawable/header" />

    .... <other views> ...
Run Code Online (Sandbox Code Playgroud)

我想用可绘制的背景替换它,以便我可以使用标题图像空间来显示数据,这样可以节省我在不同活动中重复相同的布局.

出于这个原因,我创建了一个drawable,我可以在android:background属性中引用:

    <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
        <item>
            <shape android:shape="rectangle" >
                <solid android:color="#919EAC" />
            </shape>
        </item>
        <item>
            <bitmap 
                android:antialias="true"
                android:gravity="top|center_horizontal"
                android:src="@drawable/header" />
        </item>
    </layer-list>
Run Code Online (Sandbox Code Playgroud)

此drawable定义了布局将定义的彩色背景,并定义了一个标题图像,否则将作为ImageView包含在布局中.

然而,现在我的图像缩放,而我希望它被裁剪.

检查Android文档我尝试了其他重力模式,如

    android:gravity="top|clip_horizontal"
Run Code Online (Sandbox Code Playgroud)

但它似乎仍然显示/缩放与图像视图不同.

背景可绘制的正确定义是什么?

MKJ*_*ekh -6

使用scaleType = "centerCrop"您获得了您想要的结果,裁剪图像的边缘并显示适合该尺寸的中心部分

对于图像视图:

ImageView具有仅适用于设置为要显示的源的图像的scaleType属性。也就是说,就好像那时是它的来源一样。TextViewText

即使您可能已经注意到,scaleType 不适用于设置为背景的图像,该图像仅适用于在运行时以 XML 形式提供的源图像。

对于布局

Layout可以显示背景图像,但没有为布局提供任何可以处理背景图像并根据属性值对其进行缩放的属性。

ImageView所以你应该停止询问from的功能Layout,因为它没有。

2 种不同的解决方案来解决您的问题

1)在不同的可绘制文件夹中保留适当的背景标题图像并使用它,这样您就不需要在运行时缩放它,因为您已经开发了不同尺寸的图像。

2)您只需要重新设计您的XML,如下例所示

<RelativeLayout 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="50dp"
        android:background="@drawable/subway"
        android:scaleType="centerCrop" />

    <Button
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_alignParentLeft="true"
         />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        />
</RelativeLayout> 
Run Code Online (Sandbox Code Playgroud)