Xamarin在Android中在Frame上形成Shadow

Mik*_*sen 7 custom-renderer xamarin.android xamarin xamarin.forms

Xamarin Forms中的Frame类非常有限,并且不允许我在Frame后面获得阴影.我使用以下代码为iOS制作了自定义渲染器:

public class RatingInfoFrameRenderer : FrameRenderer
{
    protected override void OnElementChanged(ElementChangedEventArgs<Frame> e)
    {
        base.OnElementChanged(e);

        Layer.BorderColor = UIColor.White.CGColor;
        Layer.CornerRadius = 10;
        Layer.MasksToBounds = false;
        Layer.ShadowOffset = new CGSize(-2, 2);
        Layer.ShadowRadius = 5;
        Layer.ShadowOpacity = 0.4f;
    }
}
Run Code Online (Sandbox Code Playgroud)

在Android上制作类似版本会给我带来麻烦,因为我对Android原生的知识有限.谁能告诉我要看什么,也许是一些很好的代码示例?我没有找到任何看起来与此类似的东西.

Gra*_*eng 11

在Android平台上它可以很容易,但首先,你需要在DrawableAndroid资源的文件夹下创建你的影子.例如:

<?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="#CABBBBBB" />
      <corners android:radius="2dp" />
    </shape>
  </item>

  <item
      android:left="0dp"
      android:right="0dp"
      android:top="0dp"
      android:bottom="2dp">
    <shape android:shape="rectangle">
      <solid android:color="@android:color/white" />
      <corners android:radius="2dp" />
    </shape>
  </item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)

将此文件命名为"shadow.xml"并将其放在DrawableAndroid项目的文件夹下,然后在您的RatingInfoFrameRenderer:

public class RatingInfoFrameRenderer : FrameRenderer
{
    protected override void OnElementChanged(ElementChangedEventArgs<Frame> e)
    {
        base.OnElementChanged(e);
        if (e.NewElement != null)
        {
            ViewGroup.SetBackgroundResource(Resource.Drawable.shadow);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

要更改阴影样式,可以修改shadow.xml文件,有关此内容的更多信息,可以参考google的官方文档:LayerList.