如何将阴影添加到线性布局 - android?

时间:2017-01-05 06:03:42

标签: android

在我的Android应用程序中,我必须实现类似下面给出的图像: enter image description here

我尝试使用阴影xmls进行线性布局,但它似乎并没有按照我想要的方式运行。 我正在使用的代码是:

<?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="@android:color/darker_gray" />
        <corners android:radius="5dp"/>
    </shape>
</item>
<item android:right="5dp" android:left="5dp" android:bottom="15dp">
    <shape
        android:shape="rectangle">
        <solid android:color="@android:color/white"/>
        <corners android:radius="5dp"/>
    </shape>
</item>
</layer-list>

请建议我如何实现这一目标。

6 个答案:

答案 0 :(得分:9)

您可以将带有阴影的9-patchImage作为背景,或者您可以使用以下xml作为shadowlayout for shadow的背景

  <?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Drop Shadow Stack -->
    <item>
        <shape>
            <padding android:top="1dp" android:right="1dp" android:bottom="1dp" android:left="1dp" />
            <solid android:color="#02000000" />
            <corners android:radius="8dp" />
        </shape>
    </item>
    <item>
        <shape>
            <padding android:top="1dp" android:right="1dp" android:bottom="1dp" android:left="1dp" />
            <solid android:color="#05000000" />
            <corners android:radius="7dp" />
        </shape>
    </item>
    <item>
        <shape>
            <padding android:top="1dp" android:right="1dp" android:bottom="1dp" android:left="1dp" />
            <solid android:color="#10000000" />
            <corners android:radius="6dp" />
        </shape>
    </item>
    <item>
        <shape>
            <padding android:top="1dp" android:right="1dp" android:bottom="1dp" android:left="1dp" />
            <solid android:color="#15000000" />
            <corners android:radius="5dp" />
        </shape>
    </item>
    <item>
        <shape>
            <padding android:top="1dp" android:right="1dp" android:bottom="1dp" android:left="1dp" />
            <solid android:color="#20000000" />
            <corners android:radius="4dp" />
        </shape>
    </item>
    <item>
        <shape>
            <padding android:top="1dp" android:right="1dp" android:bottom="1dp" android:left="1dp" />
            <solid android:color="#25000000" />
            <corners android:radius="3dp" />
        </shape>
    </item>
    <item>
        <shape>
            <padding android:top="1dp" android:right="1dp" android:bottom="1dp" android:left="1dp" />
            <solid android:color="#30000000" />
            <corners android:radius="3dp" />
        </shape>
    </item>

    <!-- Background -->
    <item>
    <shape>
            <solid android:color="#ffffff" />
        <corners android:radius="3dp" />
    </shape>
   </item>
</layer-list>

从你不需要阴影的任何一方移除填充

注意:

这不是我的,我把它从很久以前的地方复制过来,找不到它给予适当的信任。如果您知道从哪里开始编辑并保留信用

答案 1 :(得分:1)

我可能会迟到,但万一其他人需要它。您可以使用此工具http://inloop.github.io/shadow4android/ 它允许您制作带阴影的图像,但不是作为普通图像处理,而是作为特殊图像处理。你会得到一个以.9.png而不是.png结尾的图像 您应该保留.9,因为它会将Android Studio视为9补丁

然后将此图像添加到drawables文件夹中。将它用作Layout&amp ;;的背景。你将获得一个很好的自然阴影效果,直到现在我还没有看到任何可绘制的能够做同样的事情This is a Sample of what you will get!

答案 2 :(得分:0)

也许你可以使用CardView而不是LinearLayout,它提供了som apis来实现阴影

答案 3 :(得分:0)

一种简单的方法是将布局放在 cardview 。提供高程等,以使其更加逼真。

#firstblock,
#secondblock,
#uploadButton {
   display: none;
   padding: 10px;
}

input[value="firstblock"]:checked ~ #firstblock,
input[value="firstblock"]:checked ~ #uploadButton,
input[value="secondblock"]:checked ~ #secondblock,
input[value="secondblock"]:checked ~ #uploadButton {
      display: block;
}

答案 4 :(得分:0)

这样的事情可以解决问题:

<?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="@android:color/darker_gray" />
        <corners android:radius="5dp"/>
    </shape>
</item>
<item android:right="5dp" android:left="5dp" android:bottom="15dp">
    <shape
        android:shape="rectangle">
        <solid android:color="@android:color/white"/>
        <corners android:radius="5dp"/>
    </shape>
</item>
</layer-list>

然后在LINELayout中添加图层列表作为背景。

<LinearLayout
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:background="@drawable/background_with_shadow"/>

您也可以参考此post作为参考。

编辑:将background_with_shadow.xml文件添加到res / drawable。

对于Android 5.0及更高版本,请参阅:Defining Shadows and Clipping Views

答案 5 :(得分:-1)

此代码符合您的要求

<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="3dp" android:left="3dp"><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>