Подтвердить что ты не робот

Высота не работает для ImageView

Высота для ImageView не работает. Я объявил ImageView в XML следующим образом:

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

Что еще я должен сделать для правильной обработки изображения для ImageView?

4b9b3361

Ответ 1

Тень возвышения получается из фонового рисунка в представлении. Если ваш ImageView не имеет фона, вы не увидите тени.

Если вы хотите изменить это поведение, вам нужно создать собственный ViewOutlineProvider и вызвать View.setOutlineProvider(), чтобы установить его (и это не тривиально).

Ответ 2

Работает во всех последних версиях

Используйте CardView в качестве родительского макета. Используйте android:background="@drawable/your_img" вместо android:src="@drawable/your_img" в ImageView.

<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>

Ответ 3

Вместо того, чтобы использовать android: src, вам нужно изменить на android: background для отображения теней.

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

Ответ 4

Если вы используете 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>

Ответ 5

Для отображения круглого изображения с помощью SHADOW с атрибутом возвышения я создал круглую вытачку WITHOUT SHADOW, как показано ниже:

<?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 помогает нам создавать граничный фон, из которого атрибут возвышения может создавать тень.

Ответ 6

В Lollipop он выполняет настройку высоты. Для pre-Lollipop, вам нужно реализовать тени самостоятельно. Support-v4 имеет метод ViewCompat.setElevation(view, value), если вы проверяете источники, что нет реализации. (по крайней мере, на момент написания).

Ответ 7

В дополнение к разъяснению ответа BladeCoder: применение android:outlineProvider="bounds" к ImageView приведет к отображению тени.