Android:如何使用XML drawable创建精确的材质设计阴影

时间:2017-01-24 04:54:42

标签: android xml android-drawable android-shape android-elevation

我想制作一个XMl可绘制文件,该文件尽可能与Lollipop及以上版本的材料设计高度相似。我目前有一个甚至没有接近的阴影,因为我不知道我想要使用什么渐变。 enter image description here

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
    <shape android:shape="rectangle">
        <gradient android:angle="90"
            android:endColor="@android:color/darker_gray" 
            android:startColor="#ccc" />
        <corners android:radius="0.1dp"
            android:bottomLeftRadius="3dp"
            android:bottomRightRadius="3dp"
            android:topLeftRadius="3dp"
            android:topRightRadius="3dp"/>
    </shape>
</item>
<item
    android:left="1.5dp"
    android:right="1.5dp"
    android:top="1.5dp"
    android:bottom="1.5dp">

    <shape android:shape="rectangle">

<solid android:color="@android:color/white" />

<corners
    android:radius="0.1dp"
    android:bottomLeftRadius="3dp"
    android:bottomRightRadius="3dp"
    android:topLeftRadius="3dp"
    android:topRightRadius="3dp" />
</shape>
</item>
</layer-list>

有人能想出一个至少比我好的解决方案吗?谢谢。

2 个答案:

答案 0 :(得分:0)

您需要在布局资源文件中定义高程以投影。  在你的layout.xml文件中它应该看起来像这样

<TextView
    android:id="@+id/myview"
    android:elevation="2dp"
    android:background="@drawable/myrect" />

答案 1 :(得分:0)

要获得完美的阴影,请使用CardView

Xamarin MSDN Source

要在Visual Studio中添加Xamarin.Android.Support.v7.CardView包

<android.support.v7.widget.CardView
          xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:local="http://schemas.android.com/apk/res-auto"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:layout_margin="@dimen/shrine_grid_item_margin"
          android:orientation="vertical"
          local:cardElevation="@dimen/cardview_default_elevation">
<!-- Content Goes here-->
</android.support.v7.widget.CardView>

Android Android Devs Source

CardView小部件是v7支持库的一部分。要在您的项目中使用它,请将以下依赖项添加到应用程序模块的build.gradle文件中:

dependencies {
    implementation 'com.android.support:cardview-v7:28.0.0'
}

XXX

<androidx.cardview.widget.CardView
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto"
  android:id="@+id/ProductEntry"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:layout_margin="@dimen/shrine_grid_item_margin"
  android:orientation="vertical"
  app:cardElevation="@dimen/cardview_default_elevation">
<!-- Content Goes here-->
</androidx.cardview.widget.CardView>