在Xamarin.forms中自定义框架的角半径

时间:2020-03-05 08:22:52

标签: android xamarin.forms

为什么在使用CustomRenderer自定义Frame的CornerRadius属性时,为什么需要检索本机Control的背景并将其转换为GradientDrawable?我在下面添加了我的customrender代码。

private void UpdateCornerRadius()
    {
        if (Control.Background is GradientDrawable _gradientbackground)
        {
            var cornerRadius = (Element as CustomFrame)?.CornerRadius;
            if (!cornerRadius.HasValue)
            {
                return;
            }

            var topLeftCorner = Context.ToPixels(cornerRadius.Value.TopLeft);
            var topRightCorner = Context.ToPixels(cornerRadius.Value.TopRight);
            var bottomLeftCorner = Context.ToPixels(cornerRadius.Value.BottomLeft);
            var bottomRightCorner = Context.ToPixels(cornerRadius.Value.BottomRight);

            var cornerRadii = new[]
            {
                topLeftCorner,
                topLeftCorner,

                topRightCorner,
                topRightCorner,

                bottomRightCorner,
                bottomRightCorner,

                bottomLeftCorner,
                bottomLeftCorner,
            };

            _gradientbackground.SetCornerRadii(cornerRadii);
        }
    }

1 个答案:

答案 0 :(得分:0)

正如“火星上的老鼠”在他的评论中提到的那样,您无需在自定义渲染器中执行此操作。 Frame control具有圆角功能。不幸的是,它缺乏对特定拐角进行倒圆的能力(例如,仅对顶部拐角进行倒圆)或对不同的拐角应用不同的倒圆半径。不过不用担心,Microsoft MVP PancakeView有一个出色的nuget程序包,称为Steven Thewissen,将为您提供帮助。通读Github文档,开始非常容易。