Cómo crear sombra de botón en el estilo de diseño de material android

Nuevas directrices de diseño de materiales introducen botones elevados que están cayendo una bonita sombra. De acuerdo con la documentación del SDK de vista previa, habrá un atributo de elevation disponible en el nuevo SDK. Sin embargo, ¿hay alguna manera de lograr un efecto similar ahora?

Introduzca aquí la descripción de la imagen

Esto funcionó para mí.

Diseño con botón

 <Button xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="@dimen/button_size" android:layout_height="@dimen/button_size" android:background="@drawable/circular_button_ripple_selector" android:textAppearance="?android:textAppearanceLarge" android:textColor="@color/button_text_selector" android:stateListAnimator="@anim/button_elevation"/> 

Drawble / button_selector.xml

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:drawable="@drawable/button_selected"/> <item android:state_pressed="true" android:drawable="@drawable/button_pressed"/> <item android:drawable="@drawable/button"/> </selector> 

Anim / button_elevation.xml

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="true" android:state_pressed="true"> <objectAnimator android:duration="@android:integer/config_shortAnimTime" android:propertyName="translationZ" android:valueFrom="2dip" android:valueTo="4dip" android:valueType="floatType" /> </item> <item> <objectAnimator android:duration="@android:integer/config_shortAnimTime" android:propertyName="translationZ" android:valueFrom="4dip" android:valueTo="2dip" android:valueType="floatType" /> </item> </selector> 

Si usted tiene un botón en forma rectangular entonces usted está hecho aquí. Pero si usted tiene botón circular o de forma oval, entonces sería como,

Introduzca aquí la descripción de la imagen

Para quitar las esquinas del botón circular o de forma ovalada, añada este código a su archivo .java .

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ........... int buttonSize = (int) getResources().getDimension(R.dimen.button_size); Outline circularOutline = new Outline(); circularOutline.setOval(0, 0, buttonSize, buttonSize); for (int i = 0; i < MAX_BUTTONS; i++) { Button button = ...... ....... button.setOutline(circularOutline); ........ } ..... } 

¡La forma angular quitada !! Ahora, se vería exactamente como

Introduzca aquí la descripción de la imagen

Puede utilizar imágenes de 9 parches, con sombras. Ponga la imagen en drawable – xxhdpi y establézcala como fondo en el botón u otro elemento.

 android:background="@drawable/shadow_bg" 

O puede utilizar CardView como un botón y utilizar su CardView como un botón y su método setCardElevation. Combinado con eventos táctiles y ValueAnimator, podría obtener una bonita sombra animada debajo del botón.

  • Agregar sombra al ShapeDrawable mediante programación
  • ¿Cómo evitar que drawBitmap de Android sólo dibuje imágenes en negro?
  • Cómo proporcionar la sombra al botón
  • Android cómo dibujar un rect rectangular y sombra Layout
  • Cómo aplicar sombra a ImageView?
  • Cómo colocar el lienzo en View.DragShadowBuilder.onProvideShadowMetrics
  • Android Paint setShadowLayer () ignora el color de su Paint
  • Google map android api v2 marcador sombras
  • Android "elevación" que no muestra una sombra
  • Cómo configurar la sombra de una vista en Android?
  • Android No se puede eliminar el color en la parte superior e inferior
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.