
Como você pode ver na imagem, quero sombra atrás de um Button. Eu criei Buttoncom cantos arredondados. Mas o problema é que não consigo gerar uma sombra por trás disso Button. Como posso conseguir isso?

Como você pode ver na imagem, quero sombra atrás de um Button. Eu criei Buttoncom cantos arredondados. Mas o problema é que não consigo gerar uma sombra por trás disso Button. Como posso conseguir isso?
Respostas:
Use esta abordagem para obter a aparência desejada.
button_selector.xml:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<layer-list>
<item android:right="5dp" android:top="5dp">
<shape>
<corners android:radius="3dp" />
<solid android:color="#D6D6D6" />
</shape>
</item>
<item android:bottom="2dp" android:left="2dp">
<shape>
<gradient android:angle="270"
android:endColor="#E2E2E2" android:startColor="#BABABA" />
<stroke android:width="1dp" android:color="#BABABA" />
<corners android:radius="4dp" />
<padding android:bottom="10dp" android:left="10dp"
android:right="10dp" android:top="10dp" />
</shape>
</item>
</layer-list>
</item>
</selector>
E em seu layout xml:
<Button
android:background="@drawable/button_selector"
...
..
/>
itemele diz que android:drawableé necessário .
<selector>e <item>não são necessários. A imagem é revertida, como @ user4702646 disse.
Para Android versão 5.0 e superior
experimente a Elevação para outras vistas ..
android:elevation="10dp"
Para botões,
android:stateListAnimator="@anim/button_state_list_animator"
button_state_list_animator.xml - https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/anim/button_state_list_anim_material.xml
versão inferior a 5.0,
Para todas as visualizações,
android:background="@android:drawable/dialog_holo_light_frame"
Minha saída:

Aqui está o meu botão com sombra cw_button_shadow.xml dentro da drawable pasta
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="false">
<layer-list>
<!-- SHADOW -->
<item>
<shape>
<solid android:color="@color/red_400"/>
<!-- alttan gölge -->
<corners android:radius="19dp"/>
</shape>
</item>
<!-- BUTTON alttan gölge
android:right="5px" to make it round-->
<item
android:bottom="5px"
>
<shape>
<padding android:bottom="5dp"/>
<gradient
android:startColor="#1c4985"
android:endColor="#163969"
android:angle="270" />
<corners
android:radius="19dp"/>
<padding
android:left="10dp"
android:top="10dp"
android:right="5dp"
android:bottom="10dp"/>
</shape>
</item>
</layer-list>
</item>
<item android:state_pressed="true">
<layer-list>
<!-- SHADOW -->
<item>
<shape>
<solid android:color="#102746"/>
<corners android:radius="19dp"/>
</shape>
</item>
<!-- BUTTON -->
<item android:bottom="5px">
<shape>
<padding android:bottom="5dp"/>
<gradient
android:startColor="#1c4985"
android:endColor="#163969"
android:angle="270" />
<corners
android:radius="19dp"/>
<padding
android:left="10dp"
android:top="10dp"
android:right="5dp"
android:bottom="10dp"/>
</shape>
</item>
</layer-list>
</item>
</selector>
Como usar. no Button xml, você pode redimensionar sua altura e peso
<Button
android:text="+ add friends"
android:layout_width="120dp"
android:layout_height="40dp"
android:background="@drawable/cw_button_shadow" />
Se você está almejando dispositivos pré-Lollipop, você pode usar Shadow-Layout , já que é fácil e você pode usá-lo em diferentes tipos de layouts.
Adicione o layout de sombra ao seu arquivo Gradle :
dependencies {
compile 'com.github.dmytrodanylyk.shadow-layout:library:1.0.1'
}
No topo do layout xml onde você tem o botão, adicione ao topo :
xmlns:app="http://schemas.android.com/apk/res-auto"
ele disponibilizará os atributos personalizados.
Em seguida, você coloca um layout de sombra em torno de você Button :
<com.dd.ShadowLayout
android:layout_marginTop="16dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:sl_shadowRadius="4dp"
app:sl_shadowColor="#AA000000"
app:sl_dx="0dp"
app:sl_dy="0dp"
app:sl_cornerRadius="56dp">
<YourButton
.... />
</com.dd.ShadowLayout>
Você pode então ajustar as app:configurações para corresponder à sua sombra necessária.
Espero que ajude.
Eu tentei o código de cima e fiz minha própria sombra, que é um pouco mais próxima do que estou tentando alcançar. Talvez ajude outros também.
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<layer-list>
<item android:left="5dp" android:top="5dp">
<shape>
<corners android:radius="3dp" />
<gradient
android:angle="315"
android:endColor="@android:color/transparent"
android:startColor="@android:color/black"
android:type="radial"
android:centerX="0.55"
android:centerY="0"
android:gradientRadius="300"/>
<padding android:bottom="1dp" android:left="0dp" android:right="3dp" android:top="0dp" />
</shape>
</item>
<item android:bottom="2dp" android:left="3dp">
<shape>
<corners android:radius="1dp" />
<solid android:color="@color/colorPrimary" />
</shape>
</item>
</layer-list>
</item>
</selector>
Tente isso se funcionar para você

android:background="@drawable/drop_shadow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="3dp"
android:paddingTop="3dp"
android:paddingRight="4dp"
android:paddingBottom="5dp"
Amostra de imagem de 9 patch com sombra
Depois de muita pesquisa, descobri um método fácil.
Crie uma imagem de 9 patch e aplique-a como botão ou fundo de qualquer outra visualização.
Você pode criar uma imagem de 9 patch com sombra usando este site .
Coloque a imagem de 9 patch em seu diretório drawable e aplique-a como plano de fundo para o botão.
mButton.setBackground(ContextCompat.getDrawable(mContext, R.drawable.your_9_patch_image);
Você pode tentar isto:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<layer-list>
<item android:left="1dp" android:top="3dp">
<shape>
<solid android:color="#a5040d" />
<corners android:radius="3dip"/>
</shape>
</item>
</layer-list>
</item>
<item>
<layer-list>
<item android:left="0dp" android:top="0dp">
<shape>
<solid android:color="#99080d" />
<corners android:radius="3dip"/>
</shape>
</item>
<item android:bottom="3dp" android:right="2dp">
<shape>
<solid android:color="#a5040d" />
<corners android:radius="3dip"/>
</shape>
</item>
</layer-list>
</item>
você pode usar esta ótima biblioteca https://github.com/BluRe-CN/ComplexView e é realmente fácil de usar