如何只为按钮添加底部阴影
How to add only bottom shadow for buttons
我有三个按钮被拉伸到整个 window。对于所有这些按钮,我只需要为底部添加阴影。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/buttons_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<ImageButton
android:id="@+id/gath"
android:layout_width="0dp"
android:layout_height="35dp"
android:layout_weight="1"
app:srcCompat="@drawable/ic_gath"
android:background="@drawable/button_shadow"
android:layout_marginTop="40dp"
/>
<ImageButton
android:id="@+id/foll"
android:layout_width="0dp"
android:layout_height="35dp"
android:layout_weight="1"
app:srcCompat="@drawable/ic_foll"
android:background="@drawable/button_shadow"
android:layout_marginTop="40dp"
/>
<ImageButton
android:id="@+id/del"
android:layout_width="0dp"
android:layout_height="35dp"
android:layout_weight="1"
app:srcCompat="@drawable/ic_del"
android:background="@drawable/button_shadow"
android:layout_marginTop="40dp"
/>
</LinearLayout>
</RelativeLayout>
我将图层列表划分为两部分:1) 按钮的主要背景色和 2) 渐变
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="@color/colorPrimary"/>
<size android:height="30dp"/>
</shape>
</item>
<item>
<shape android:shape="rectangle">
<gradient
android:startColor="#0000"
android:endColor="#9444"
android:type="linear"
android:angle="90">
</gradient>
<size android:height="5dp"/>
</shape>
</item>
</layer-list>
现在我只看到 colorPrimary(主背景色),没有别的。我试图使用高程但无法删除右侧和左侧阴影。
谢谢珍妮弗。他找到了完美的解决方案。我找到了类似的解决方案:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:left="0dp"
android:right="0dp"
android:top="30dp"
android:bottom="0dp">
<shape android:shape="rectangle">
<gradient
android:startColor="#0000"
android:endColor="#9444"
android:type="linear"
android:angle="90">
</gradient>
</shape>
</item>
<item
android:left="0dp"
android:right="0dp"
android:top="0dp"
android:bottom="5dp">
<shape android:shape="rectangle">
<solid android:color="@color/colorAccent"/>
</shape>
</item>
</layer-list>
我建议你搜索一些库来绘制所有 API 级别的阴影。我使用 this one 为我的阴影着色并使它们仅在我的视野下方。您可以根据需要进行更改。
try this..
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="true">
<layer-list>
<item android:top="-10dp" android:left="-10dp" android:right="-10dp">
<shape android:shape="rectangle">
<gradient
android:angle="90"
android:startColor="#FF000000"
android:type="linear" />
<corners android:radius="5dp" />
<padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" />
</shape>
</item>
</layer-list>
</item>
</selector>
And for Button..
<ImageButton
android:id="@+id/gath"
android:layout_width="0dp"
android:layout_height="35dp"
android:layout_marginTop="40dp"
android:layout_weight="1"
android:background="@drawable/tiles"
app:srcCompat="@drawable/ic_del" />
我认为对您来说最简单的方法是将 button_shadow.xml 更改为如下内容:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<size android:height="30dp" />
<solid android:color="#FFFF0000" />
</shape>
</item>
<item android:top="30dp">
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<size android:height="5dp" />
<solid android:color="#FF000000" />
<gradient
android:angle="90"
android:endColor="#FF888888"
android:startColor="#FF000000"
android:type="linear" />
</shape>
</item>
</layer-list>
您可以尝试渐变开始和结束颜色。如果您的 ImageButton 设置为 35dp 的总高度,而 button_shadow.xml 中的 android:top 设置为 30dp,则它将以 5dp 的总高度显示。根据开始和结束颜色,您可以使它看起来像阴影从按钮下方开始一点点,或坚持下去。
在我的虚拟设备上现在看起来像这样:
我有三个按钮被拉伸到整个 window。对于所有这些按钮,我只需要为底部添加阴影。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/buttons_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<ImageButton
android:id="@+id/gath"
android:layout_width="0dp"
android:layout_height="35dp"
android:layout_weight="1"
app:srcCompat="@drawable/ic_gath"
android:background="@drawable/button_shadow"
android:layout_marginTop="40dp"
/>
<ImageButton
android:id="@+id/foll"
android:layout_width="0dp"
android:layout_height="35dp"
android:layout_weight="1"
app:srcCompat="@drawable/ic_foll"
android:background="@drawable/button_shadow"
android:layout_marginTop="40dp"
/>
<ImageButton
android:id="@+id/del"
android:layout_width="0dp"
android:layout_height="35dp"
android:layout_weight="1"
app:srcCompat="@drawable/ic_del"
android:background="@drawable/button_shadow"
android:layout_marginTop="40dp"
/>
</LinearLayout>
</RelativeLayout>
我将图层列表划分为两部分:1) 按钮的主要背景色和 2) 渐变
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="@color/colorPrimary"/>
<size android:height="30dp"/>
</shape>
</item>
<item>
<shape android:shape="rectangle">
<gradient
android:startColor="#0000"
android:endColor="#9444"
android:type="linear"
android:angle="90">
</gradient>
<size android:height="5dp"/>
</shape>
</item>
</layer-list>
现在我只看到 colorPrimary(主背景色),没有别的。我试图使用高程但无法删除右侧和左侧阴影。
谢谢珍妮弗。他找到了完美的解决方案。我找到了类似的解决方案:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:left="0dp"
android:right="0dp"
android:top="30dp"
android:bottom="0dp">
<shape android:shape="rectangle">
<gradient
android:startColor="#0000"
android:endColor="#9444"
android:type="linear"
android:angle="90">
</gradient>
</shape>
</item>
<item
android:left="0dp"
android:right="0dp"
android:top="0dp"
android:bottom="5dp">
<shape android:shape="rectangle">
<solid android:color="@color/colorAccent"/>
</shape>
</item>
</layer-list>
我建议你搜索一些库来绘制所有 API 级别的阴影。我使用 this one 为我的阴影着色并使它们仅在我的视野下方。您可以根据需要进行更改。
try this..
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="true">
<layer-list>
<item android:top="-10dp" android:left="-10dp" android:right="-10dp">
<shape android:shape="rectangle">
<gradient
android:angle="90"
android:startColor="#FF000000"
android:type="linear" />
<corners android:radius="5dp" />
<padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" />
</shape>
</item>
</layer-list>
</item>
</selector>
And for Button..
<ImageButton
android:id="@+id/gath"
android:layout_width="0dp"
android:layout_height="35dp"
android:layout_marginTop="40dp"
android:layout_weight="1"
android:background="@drawable/tiles"
app:srcCompat="@drawable/ic_del" />
我认为对您来说最简单的方法是将 button_shadow.xml 更改为如下内容:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<size android:height="30dp" />
<solid android:color="#FFFF0000" />
</shape>
</item>
<item android:top="30dp">
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<size android:height="5dp" />
<solid android:color="#FF000000" />
<gradient
android:angle="90"
android:endColor="#FF888888"
android:startColor="#FF000000"
android:type="linear" />
</shape>
</item>
</layer-list>
您可以尝试渐变开始和结束颜色。如果您的 ImageButton 设置为 35dp 的总高度,而 button_shadow.xml 中的 android:top 设置为 30dp,则它将以 5dp 的总高度显示。根据开始和结束颜色,您可以使它看起来像阴影从按钮下方开始一点点,或坚持下去。
在我的虚拟设备上现在看起来像这样: