【问题标题】:How to add a blurred drop shadow to a button?如何为按钮添加模糊的阴影?
【发布时间】:2018-05-20 08:47:11
【问题描述】:

我需要为我的按钮添加模糊阴影:

我尝试使用 layer-list xml drawable 创建背景,但它看起来不像模糊。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- Drop Shadow Stack -->
    <item>
        <shape>
            <corners android:radius="45dp" />
            <padding
                android:bottom="2dp"
                android:left="1dp"
                android:right="1dp"
                android:top="1dp" />

            <stroke
                android:width="6dp"
                android:color="#007879E8" />

        </shape>
    </item>
    //////   10 more items
        <item>
        <shape>
            <corners android:radius="45dp" />
            <padding
                android:bottom="2dp"
                android:left="1dp"
                android:right="1dp"
                android:top="1dp" />

            <stroke
                android:width="6dp"
                android:color="#177879E8" />


        </shape>
    </item>

    <!-- Background -->
    <item>
        <shape>
            <corners android:radius="45dp" />
            <stroke
                android:width="2dp"
                android:color="@color/main_purple_text_color" />
        </shape>
    </item>

</layer-list>

我还尝试使用带有模糊 png 的按钮后面的背景元素,但它使用了许多资源,我无法创建选择器来更改悬停或单击时的背景。

我需要为按钮设置单个背景文件,并使用选择器在悬停/单击时更改模糊和渐变。 任何想法如何使用 Android SDK 实现这样的效果?

更新 1

感谢大家的回答,但我不是在问如何创建渐变。我已经这样做了。我需要创建模糊的阴影。

【问题讨论】:

  • 你能做得更好吗?谢谢。

标签: android gradient blur dropshadow


【解决方案1】:

你可以通过 Graident 做到这一点

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<gradient 
    android:startColor="#6586F0"
    android:centerColor="#D6D6D6"
    android:endColor="#4B6CD6"
    android:angle="90"/>
<corners 
    android:radius="0dp"/>

【讨论】:

    【解决方案2】:

    创建一个可绘制的“round_corner.xml

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape>
            <gradient
                android:angle="360"
                android:startColor="#8A88F3"
                android:endColor="#B96AE8"
                android:type="linear" />
    
            <corners android:bottomLeftRadius="24dp"
                android:bottomRightRadius="24dp"
                android:topLeftRadius="24dp" android:topRightRadius="24dp" />
        </shape>
    </item>
    </selector>
    

    在Activity中设置xml中的按钮

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/white"
        android:orientation="vertical">
    
        <Button
            android:id="@+id/btn_language_select_save"
            android:layout_width="wrap_content"
            android:layout_height="60dp"
            android:layout_centerInParent="true"
            android:layout_marginTop="20dp"
            android:background="@drawable/round_corner_spiner"
            android:paddingLeft="130dp"
            android:paddingRight="130dp"
            android:text="Vlad[enter image description here][1]"
            android:textColor="@android:color/white"
            android:textSize="20sp"
            android:visibility="visible" />
    </RelativeLayout>
    

    乐于助人links

    希望对你有帮助

    【讨论】:

      【解决方案3】:

      创建可绘制的 shadow.xml 文件

      <shape xmlns:android="http://schemas.android.com/apk/res/android"
      android:shape="rectangle">
      
      <solid android:color="#E3D5FC" />
      <corners
          android:radius="20dp"/>
      <padding
          android:bottom="1dp"
          android:left="1dp"
          android:right="1dp"
          android:top="1dp" >
      </padding>
      

      创建另一个可绘制的background.xml文件

      <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
      
      <item android:drawable="@drawable/shadow" />
      <item>
          <shape xmlns:android="http://schemas.android.com/apk/res/android"
              android:shape="rectangle">
              <gradient
                  android:angle="0"
                  android:centerColor="#9E7CEF"
                  android:endColor="#B070EB"
                  android:startColor="#8989F4" />
              <corners android:radius="22dp" />
              <size android:height="40dp"/>
          </shape>
      </item>
      

      并在 xml 中使用此文件,如下所示。

      <?xml version="1.0" encoding="utf-8"?>
      <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:orientation="vertical" android:layout_width="match_parent"
      android:layout_height="match_parent">
      
      <Button
          android:id="@+id/img_save"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:background="@drawable/background"
          android:gravity="center"
          android:text="BUTTON"
          android:textAppearance="?android:attr/textAppearanceMedium"
          android:textColor="@android:color/white"
          android:layout_centerInParent="true"/>
      </RelativeLayout>
      

      希望对你有帮助。

      【讨论】:

      • 谢谢,但它看起来并不模糊。
      • 要添加像模糊视图一样的阴影,您可以添加与效果完全相同的背景图像。
      【解决方案4】:

      我找到了解决方案:我们需要通过 generator 创建带有模糊阴影的 9.png 并将其传递给包含按钮背景渐变的可绘制图层列表:

      <?xml version="1.0" encoding="utf-8"?>
      <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
          <item android:drawable="@drawable/blurred_9_path_png" />
          <item>
              <shape android:shape="rectangle" android:padding="10dp">
                  <corners android:radius="45dp" />
                  <gradient
                      android:angle="45"
                      android:endColor="@color/facebook_btn_fill_grad2"
                      android:startColor="@color/facebook_btn_fill_grad1"
                      android:type="linear" />
                  <padding
                      android:bottom="0dp"
                      android:left="0dp"
                      android:right="0dp"
                      android:top="0dp" />
              </shape>
          </item>
      
      </layer-list> 
      

      之后我们就可以使用这种带有不同9.path模糊阴影的drawable来创建选择器了。

      【讨论】:

      • 你在网站上放了什么选项?
      • 是的,你在网站上放了哪些选项来创建它?
      • 我也很想知道您在网站上使用了哪些选项。而如果按钮的大小发生变化,这种情况下如何应用阴影呢?
      【解决方案5】:

      我将其添加为背景可绘制对象(灰色阴影):

      <!-- Drop Shadow Stack -->
      <item>
          <shape>
              <padding
                  android:bottom="1dp"
                  android:left="1dp"
                  android:right="1dp"
                  android:top="1dp" />
              <solid android:color="#1f000000" />
              <corners android:radius="30dp" />
          </shape>
      </item>
      <item>
          <shape>
              <padding
                  android:bottom="1dp"
                  android:left="1dp"
                  android:right="1dp"
                  android:top="1dp" />
              <solid android:color="#2f000000" />
              <corners android:radius="30dp" />
          </shape>
      </item>
      <item>
          <shape>
              <padding
                  android:bottom="1dp"
                  android:left="1dp"
                  android:right="1dp"
                  android:top="1dp" />
              <solid android:color="#3f000000" />
              <corners android:radius="30dp" />
          </shape>
      </item>
      
      <!-- Background -->
      <item>
          <shape>
              <solid android:color="@android:color/white" />
              <corners android:radius="30dp" />
          </shape>
      </item>
      

      确保 textview 的高度/宽度/填充足够大以包含阴影 3dp 上方(从 #3f000000 到 #1f000000 的所有颜色为 1dp+1dp+1dp)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-17
        相关资源
        最近更新 更多