让背景可绘制小于视图

let background drawable be smaller than view

如何让或强制背景可绘制对象小于视图?假设我有一个 ImageView,用户可以点击它来拍照。我想将 ic_photo_camera 图标作为 ImageView 的背景。但我不希望图标拉伸以适应 ImageView 的大小:我希望图标保持其自身的大小。在不使用视图组合的情况下如何做到这一点?而只是一种观点?例如我可以使用一个 RelativeLayout 和两个 ImageView 来完成这个。但我想知道是否只有一个 ImageView 的选项。

更新

我认为这和图片一样好:现在就可以了。但是我不想用三视图,可以的话我想用一个。

<?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:background="#eeeeee"
    android:layout_height="match_parent">

    <RelativeLayout
        android:id="@+id/container"
        android:layout_width="250dp"
        android:layout_height="150dp"
        android:layout_centerHorizontal="true">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:scaleType="center"
            android:src="@drawable/ic_photo_camera_white_48dp" />

        <ImageView
            android:id="@+id/photo"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_centerInParent="true"
            android:scaleType="centerCrop" />
    </RelativeLayout>

    <TextView
        android:id="@+id/label"
        android:layout_width="match_parent"
        android:gravity="center"
        android:layout_height="wrap_content"
        android:layout_below="@+id/container"
        android:background="#FFFFFF"
        tools:text="This is the label to some image" />


</RelativeLayout>

你好,能不能给个你想展示的图片,我有点看不懂你说的。我尝试你可以使用 imageView 的 scaleType 属性,它有 center,fixXY 等等。我很感激它可以帮助你。

是的,你可以。

<?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:background="#eeeeee">

    <ImageView
        android:id="@+id/container"
        android:layout_width="250dp"
        android:layout_height="150dp"
        android:layout_centerInParent="true"
        android:scaleType="center"
        android:src="@drawable/ic_photo_camera_white_48dp"
        android:background="@drawable/bg"/>

    <TextView
        android:id="@+id/label"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/container"
        android:background="#FFFFFF"
        android:gravity="center"
        tools:text="This is the label to some image" />

</RelativeLayout>

并在您的 res/drawable 中创建 bg.xml:

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:gravity="clip_horizontal"
    android:src="@drawable/photo" />

@drawable/photo 是您要放入 ID 为 "photo" 的旧 ImageView 的内容。 gravity 可以根据你的图像 aspectRatio 更改为 clip_vertical。

如果您想动态设置 "photo",您可以:

    ImageView iv_container = (ImageView) findViewById(R.id.container);
    Drawable drawable = getResources().getDrawable(R.drawable.photo_2);
    ((BitmapDrawable)drawable).setGravity(Gravity.CLIP_HORIZONTAL);
    iv_container.setBackgroundDrawable(drawable);