Высота не работает для 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?
Ответы
Ответ 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
приведет к отображению тени.