【发布时间】:2018-07-05 18:11:49
【问题描述】:
我正在尝试在 Xamarin.Forms(针对 Android 平台)上的图像视图上设置阴影,我在互联网上获得了一些示例。
PCL 代码非常简单,平台看起来也很简单。 The recipe available at the official xamarin developer site 是这样的:
[assembly: ResolutionGroupName("MyGroupName")]
[assembly: ExportEffect(typeof(LabelShadowEffect), "ShadowEffect")]
namespace MyWorkspace
{
public class LabelShadowEffect : PlatformEffect
{
protected override void OnAttached()
{
try
{
var control = (Control as TextView); // TextView have the SetShadowLayer method, but others views don't
var effect = (ShadowEffect)Element.Effects.FirstOrDefault(e => e is ShadowEffect);
if (effect != null)
{
float radius = effect.Radius;
float distanceX = effect.DistanceX;
float distanceY = effect.DistanceY;
Android.Graphics.Color color = effect.Color.ToAndroid();
control?.SetShadowLayer(radius, distanceX, distanceY, color);
}
}
catch (Exception)
{
}
}
protected override void OnDetached()
{
}
}
}
所以我注意到这个配方仅适用于使用 TextView 呈现的组件(这是唯一具有 SetShadowLayer 方法的类)。在other sources 我看到了一些更通用的东西,比如:
public class ShadowEffect : PlatformEffect
{
protected override void OnAttached ()
{
Container.Layer.ShadowOpacity = 1;
Container.Layer.ShadowColor = UIColor.Black.ToCGColor;
Container.Layer.ShadowRadius = 6;
}
protected override void OnDetached ()
{
Container.Layer.ShadowOpacity = 0;
}
}
通过使用UIColor,我知道它是针对iOS 平台的。在 Android 视图上没有这样的事情。我查看了 XF FrameRenderer 源代码,但无法理解它们如何使阴影效果起作用。
有人可以帮我吗?
【问题讨论】:
标签: c# xamarin xamarin.forms xamarin.android shadow