我需要在带有圆角的Xamarin.Forms中具有图像控件。但我没有找到可以做到的任何财产。如何获得圆形图像?Xamarin.Forms中的CircularImage
3
A
回答
6
您可以使用 Image Circle Control Plugin
<controls:CircleImage Source="{Binding Image}" Aspect="AspectFill">
<controls:CircleImage.WidthRequest>
<OnPlatform x:TypeArguments="x:Double"
iOS="55"
Android="55"
WinPhone="75"/>
</controls:CircleImage.WidthRequest>
<controls:CircleImage.HeightRequest>
<OnPlatform x:TypeArguments="x:Double"
iOS="55"
Android="55"
WinPhone="75"/>
</controls:CircleImage.HeightRequest>
</controls:CircleImage>
您还可以使用CircleImage从Xamarin-表单实验室项目。
2
如果您需要一个使用Custom Renderer的解决方案(以您想要的方式调整控件),以下是我的实现。
public class ImageCircle:Image
{
public ImageCircle()
{
}
}
[assembly: ExportRenderer(typeof(ImageCircle), typeof(ImageCircleRenderer))]
namespace myNamespace.Droid
{
public class ImageCircleRenderer:ImageRenderer
{
public ImageCircleRenderer()
{
}
protected override void OnElementChanged(ElementChangedEventArgs<Image> e)
{
base.OnElementChanged(e);
if (e.OldElement == null)
{
if ((int)Android.OS.Build.VERSION.SdkInt < 20)
SetLayerType(Android.Views.LayerType.Software, null);
}
}
protected override bool DrawChild(Canvas canvas, global::Android.Views.View child, long drawingTime)
{
try
{
var radius = Math.Min(Width, Height)/2;
var strokeWidth = 10;
radius -= strokeWidth/2;
//Create path to clip
var path = new Path();
path.AddCircle(Width/2, Height/2, radius, Path.Direction.Ccw);
canvas.Save();
canvas.ClipPath(path);
var result = base.DrawChild(canvas, child, drawingTime);
canvas.Restore();
// Create path for circle border
path = new Path();
path.AddCircle(Width/2, Height/2, radius, Path.Direction.Ccw);
var paint = new Paint();
paint.AntiAlias = true;
paint.StrokeWidth = 5;
paint.SetStyle(Paint.Style.Stroke);
paint.Color = global::Android.Graphics.Color.White;
canvas.DrawPath(path, paint);
//Properly dispose
paint.Dispose();
path.Dispose();
return result;
}
catch (Exception ex)
{
Console.WriteLine("Unable to create circle image: " + ex);
}
return base.DrawChild(canvas, child, drawingTime);
}
}
}
[assembly: ExportRenderer(typeof(ImageCircle), typeof(ImageCircleRenderer))]
namespace LifesTopTen.iOS
{
public class ImageCircleRenderer:ImageRenderer
{
public ImageCircleRenderer()
{
}
private void CreateCircle()
{
try
{
double min = Math.Min(Element.Width, Element.Height);
Control.Layer.CornerRadius = (float)(min/2.0);
Control.Layer.MasksToBounds = false;
Control.Layer.BorderColor = Color.White.ToCGColor();
Control.Layer.BorderWidth = 3;
Control.ClipsToBounds = true;
}
catch(Exception ex)
{
Console.WriteLine ("Unable to create circle image: " + ex);
}
}
protected override void OnElementChanged (ElementChangedEventArgs<Image> e)
{
base.OnElementChanged (e);
if (e.OldElement != null || Element == null)
return;
CreateCircle();
}
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(sender, e);
if (e.PropertyName == VisualElement.HeightProperty.PropertyName ||
e.PropertyName == VisualElement.WidthProperty.PropertyName)
{
CreateCircle();
}
}
}
}
6
我使用FFImageLoading库CachedImage
控制与圆改造为循环图片:
<ffimageloading:CachedImage
DownsampleToViewSize="true"
Aspect="AspectFill"
Source = "{Binding Image}"
LoadingPlaceholder = "{Binding DefaultImage}"
ErrorPlaceholder = "{Binding DefaultImage}">
<ffimageloading:CachedImage.Transformations>
<fftransformations:CircleTransformation />
</ffimageloading:CachedImage.Transformations>
</ffimageloading:CachedImage>
+0
图书馆是好的,但circletransformation的边界有点难看,我认为(不光滑) –
相关问题
- 1. CircularImage图书馆夸大错误的Android
- 2. Xamarin.Forms中的AutomationId ListView
- 3. Xamarin.Forms中的Nullable TimePicker
- 4. Xamarin.Forms中的StreamWriter中的ArgumentException
- 5. Xamarin.Forms
- 6. Xamarin.Forms中的GIF图像
- 7. Xamarin.Forms中的透明页面
- 8. Xamarin.Forms中的扩展器
- 9. Xamarin.Forms中的富文本框
- 10. 访问Xamarin.Forms中的相机
- 11. Xamarin.Forms中的复选框
- 12. Xamarin.Forms(PCL)项目中的NotlmplementedException
- 13. xamarin.forms获取图库中图片的字节数组xamarin.forms
- 14. 的Http在Xamarin.Forms
- 15. 的ListView [Xamarin.Forms]
- 16. Xamarin.Forms上的System.MissingMethocException
- 17. Xamarin.Forms MainPage
- 18. 用Xamarin.forms
- 19. Xamarin.forms OnAppLinkRequestReceived
- 20. Xamarin.Forms GridLayout
- 21. 在Xamarin.Forms
- 22. 从Xamarin.Forms
- 23. Xamarin.Forms WebChromeClient
- 24. 在Xamarin.forms
- 25. 在Xamarin.Forms
- 26. Xamarin.Forms NavigationPage
- 27. 与Xamarin.Forms
- 28. Xamarin.Forms/KeyPressEventArgs
- 29. Xamarin.Forms Listview
- 30. Xamarin.Forms Behaviors
这是伟大的了解。 – hotspring