translationz studio sombra example android imageview android-elevation

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>