android - studio - La elevación no funciona para ImageView
sombra en android studio (6)
La elevación para ImageView no está funcionando. Declaré ImageView en XML así:
<ImageView
android:id="@+id/image"
android:layout_width="100dp"
android:layout_height="50dp"
android:elevation="10dp"
android:src="@drawable/youtube" />
¿Qué más debo hacer para que la elevación funcione correctamente para ImageView?
En Lollipop
funciona el ajuste de elevación. Para pre-Lollipop,
necesitas implementar sombras por ti mismo. Support-v4
tiene el ViewCompat.setElevation(view, value)
para, si verifica las fuentes, no hay implementación. (Al menos, al momento de escribir).
En lugar de utilizar android: src, debe cambiar a android: background para mostrar sombras.
<ImageView
android:id="@+id/image"
android:layout_width="100dp"
android:layout_height="50dp"
android:elevation="10dp"
android:background="@drawable/youtube" />
La sombra de elevación se deriva del fondo dibujable de una Vista. Si su ImageView no tiene fondo, no verá ninguna sombra.
Si desea cambiar ese comportamiento, debe crear su propio ViewOutlineProvider
y llamar a View.setOutlineProvider()
para configurarlo (y esto no es trivial).
Para mostrar una imagen redonda con SHADOW con atributo de elevación, creé una dibujable redonda SIN SOMBRA como se muestra a continuación:
<?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>
Utilice este dibujo como fondo en su ImageView como se muestra a continuación:
<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" />
Esto mostrará ImageView con sombra.
Una pregunta que podría surgir en su mente es por qué usar xml drawable. Como mencionaron otros desarrolladores en varias respuestas a esta pregunta, la sombra se forma a partir de un fondo y un fondo delimitado para ser más específico. Xml drawable nos ayuda a crear un fondo con bordes desde el cual el atributo de elevación puede crear sombras.
Si está utilizando CardView, asegúrese de dejar el fondo de CardView transparente.
<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>
Funciona en todas las últimas versiones.
Utilice CardView como diseño principal. Use android:background="@drawable/your_img"
lugar de android:src="@drawable/your_img"
en 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>