feature: Android renderers
This commit is contained in:
@ -1,6 +1,5 @@
|
||||
using Android.Content;
|
||||
using Android.Graphics;
|
||||
using Android.Views;
|
||||
using Pixiview.Droid.Renderers;
|
||||
using Pixiview.UI;
|
||||
using Xamarin.Forms;
|
||||
@ -11,8 +10,6 @@ namespace Pixiview.Droid.Renderers
|
||||
{
|
||||
public class CardViewRenderer : VisualElementRenderer<CardView>
|
||||
{
|
||||
ViewOutlineProvider original;
|
||||
|
||||
public CardViewRenderer(Context context) : base(context)
|
||||
{
|
||||
}
|
||||
@ -27,39 +24,19 @@ namespace Pixiview.Droid.Renderers
|
||||
var radius = element.CornerRadius;
|
||||
if (radius > 0)
|
||||
{
|
||||
original = OutlineProvider;
|
||||
OutlineProvider = new CornerRadiusOutlineProvider(element, radius);
|
||||
ClipToOutline = true;
|
||||
//var scale = Resources.DisplayMetrics.Density;
|
||||
//OutlineProvider = new CornerRadiusOutlineProvider(element, radius, scale);
|
||||
//ClipToOutline = true;
|
||||
|
||||
var density = Resources.DisplayMetrics.Density;
|
||||
|
||||
Elevation = (float)(element.ShadowOffset.Height + 2) * density;
|
||||
|
||||
var drawable = new RoundCornerDrawable(radius * density);
|
||||
drawable.SetColorFilter(element.BackgroundColor.ToAndroid(), PorterDuff.Mode.Src);
|
||||
((Android.Views.View)this).SetBackground(drawable);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnDetachedFromWindow()
|
||||
{
|
||||
OutlineProvider = original;
|
||||
base.OnDetachedFromWindow();
|
||||
}
|
||||
|
||||
private class CornerRadiusOutlineProvider : ViewOutlineProvider
|
||||
{
|
||||
private readonly Element element;
|
||||
private readonly float radius;
|
||||
|
||||
public CornerRadiusOutlineProvider(Element from, float r)
|
||||
{
|
||||
element = from;
|
||||
radius = r;
|
||||
}
|
||||
|
||||
public override void GetOutline(Android.Views.View view, Outline outline)
|
||||
{
|
||||
var scale = view.Resources.DisplayMetrics.Density;
|
||||
var width = (double)element.GetValue(VisualElement.WidthProperty) * scale;
|
||||
var height = (double)element.GetValue(VisualElement.HeightProperty) * scale;
|
||||
|
||||
var rect = new Rect(0, 0, (int)width, (int)height);
|
||||
outline.SetRoundRect(rect, radius * scale);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user