【问题标题】:To drop color shadow to a button in Xamarin将颜色阴影拖放到 Xamarin 中的按钮
【发布时间】:2020-07-18 07:56:24
【问题描述】:

我想在 Android 和 iOS 上的 Xamarin 中为按钮添加阴影。 我想要以下设计: Shadow button

我尝试过如下使用渲染器:

protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Button> e)
    {
        base.OnElementChanged(e);

        Control.SetShadowLayer(10, 10, 10, Android.Graphics.Color.Rgb((int)e.NewElement.BackgroundColor.R,
                                                                    (int)e.NewElement.BackgroundColor.G,
                                                                    (int)e.NewElement.BackgroundColor.B));
        this.Elevation = 50;
    }

但不幸的是它不会掉色阴影。 我也尝试过使用 Frame HasShadow 属性来产生预期的效果,但没有运气。

有什么帮助吗?

【问题讨论】:

    标签: android ios xamarin button frame


    【解决方案1】:

    欢迎来到 SO!

    对于Android,可以为Button设置自定义Background,我们可以在Resources/drawable中定义一个button_shadow.xml

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <!-- slide -->
        <item>
            <shape android:shape="rectangle">
                <padding
                  android:bottom="2dp"
                  android:left="0dp"
                  android:right="2dp"
                  android:top="0dp" />
                <solid android:color="#0000FFFF" />
                <corners android:radius="18dp" />
            </shape>
        </item>
        <item>
            <shape android:shape="rectangle">
                <padding
                  android:bottom="2dp"
                  android:left="0dp"
                  android:right="2dp"
                  android:top="0dp" />
                <solid android:color="#1000FFFF" />
                <corners android:radius="18dp" />
            </shape>
        </item>
        <item>
            <shape android:shape="rectangle">
                <padding
                   android:bottom="2dp"
                   android:left="0dp"
                   android:right="2dp"
                   android:top="0dp" />
                <solid android:color="#2000FFFF" />
                <corners android:radius="18dp" />
            </shape>
        </item>
        <item>
            <shape android:shape="rectangle">
                <padding
                   android:bottom="2dp"
                   android:left="0dp"
                   android:right="2dp"
                   android:top="0dp" />
                <solid android:color="#3000FFFF" />
                <corners android:radius="18dp" />
            </shape>
        </item>
        <item>
            <shape android:shape="rectangle">
                <padding
                   android:bottom="2dp"
                   android:left="0dp"
                   android:right="2dp"
                   android:top="0dp" />
                <solid android:color="#5000FFFF" />
                <corners android:radius="18dp" />
            </shape>
        </item>
     
        <!-- content -->
        <item>
            <shape android:shape="rectangle"
                   android:useLevel="false">
                <!-- solid -->
                <solid android:color="#00FFFF" />
                <corners android:radius="20dp" />
                <padding android:left="10dp"
                   android:right="10dp"
                   android:top="10dp"
                   android:bottom="10dp"/>
            </shape>
        </item>
    </layer-list>
    

    然后在自定义渲染器中使用如下:

    [assembly: ExportRenderer(typeof(Xamarin.Forms.Button), typeof(CustomButtonRenderer))]
    namespace AppEntryTest.Droid
    {
        class CustomButtonRenderer : ButtonRenderer
        {
    
            Context myContext;
            public CustomButtonRenderer(Context context) : base(context)
            {
                this.myContext = context;
            }
    
            protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Button> e)
            {
                base.OnElementChanged(e);
                Control.SetBackgroundResource(Resource.Drawable.button_shadow);
            }
        }
    }
    

    效果:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-18
      • 2011-12-19
      • 2010-11-22
      • 1970-01-01
      • 2011-06-28
      • 2018-12-18
      • 2015-07-14
      相关资源
      最近更新 更多