36

ImageView 的高度不起作用。我在 XML 中声明了 ImageView,如下所示:

<ImageView
        android:id="@+id/image"
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:elevation="10dp"
        android:src="@drawable/youtube" />

为了让 ImageView 正常工作,我还应该做什么?

4

8 回答 8

40

高程阴影源自 View 的背景可绘制对象。如果您的 ImageView 没有背景,您将看不到阴影。

如果你想改变这种行为,你需要自己构建ViewOutlineProvider并调用View.setOutlineProvider()来设置它(这不是微不足道的)。

于 2015-06-04T10:14:12.280 回答
15

为了显示带有高程属性的带有阴影的圆形图像,我创建了一个没有阴影的圆形可绘制对象,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
        <shape android:shape="oval">
            <solid android:color="@android:color/white" />
        </shape>
    </item>

</layer-list>

在 ImageView 中使用此可绘制对象作为背景,如下所示:

    <ImageView
        android:id="@+id/my_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/round_shape"
        android:elevation="5dp"
        android:src="@drawable/center" />

这将显示带有阴影的 ImageView。

您可能会想到的一个问题是为什么要使用 xml drawable。正如其他开发人员在这个问题的各种答案中提到的那样,阴影是由背景和带边框的背景形成的,更具体地说。Xml drawable 帮助我们创建一个带边框的背景,海拔属性可以从中创建阴影。

于 2017-12-29T06:43:35.303 回答
12

适用于所有最新版本

使用 CardView 作为父布局。在 ImageView 中使用android:background="@drawable/your_img"而不是。android:src="@drawable/your_img"

<android.support.v7.widget.CardView
    android:layout_gravity="center_horizontal"        
    app:cardElevation="5dp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <ImageView       
        android:id="@+id/image"
        android:background="@drawable/your_img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:contentDescription="@null" />

</android.support.v7.widget.CardView>
于 2017-02-10T10:45:42.093 回答
8

作为对BladeCoder 答案的澄清的补充:应用于android:outlineProvider="bounds"ImageView导致显示阴影。

于 2019-05-01T22:46:47.537 回答
3

如果您使用 CardView,请确保 CardView 背景保持透明。

<android.support.v7.widget.CardView
                android:layout_gravity="center_horizontal"
                app:cardElevation="@dimen/cardview_default_elevation"
                app:cardBackgroundColor="@android:color/transparent"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">
<ImageView
        android:id="@+id/image"
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:src="@drawable/youtube" />

</android.support.v7.widget.CardView>
于 2017-12-23T14:18:53.227 回答
2

如果您的 minSdk 版本小于 21,则海拔属性将被简单地忽略。要么改变它,要么尝试这里解释的方法https://stackoverflow.com/a/28980908/7184172

在此处输入图像描述

于 2019-12-12T17:38:08.287 回答
0

Lollipop它上面设置海拔。因为pre-Lollipop,你需要自己实现阴影。如果您检查来源,则Support-v4有方法,但没有实现。ViewCompat.setElevation(view, value)(至少,在撰写本文时)。

于 2015-06-04T10:18:41.937 回答
0

您需要更改为 android:background 来显示阴影,而不是使用 android:src。

 <ImageView
    android:id="@+id/image"
    android:layout_width="100dp"
    android:layout_height="50dp"
    android:elevation="10dp"
    android:background="@drawable/youtube" />
于 2015-08-11T07:19:13.533 回答