feature: Android card view shadow effect
This commit is contained in:
parent
6235430ded
commit
ac1e7dfd02
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.0.514" package="org.tsanie.pixiview" android:versionCode="4">
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.0.514" package="org.tsanie.pixiview" android:versionCode="4">
|
||||||
<uses-sdk android:minSdkVersion="25" android:targetSdkVersion="29" />
|
<uses-sdk android:minSdkVersion="25" android:targetSdkVersion="28" />
|
||||||
<application android:label="Pixiview" android:icon="@mipmap/icon" android:roundIcon="@mipmap/icon_round"></application>
|
<application android:label="Pixiview" android:icon="@mipmap/icon" android:roundIcon="@mipmap/icon_round"></application>
|
||||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||||
</manifest>
|
</manifest>
|
@ -1,5 +1,7 @@
|
|||||||
using Android.Content;
|
using System.ComponentModel;
|
||||||
|
using Android.Content;
|
||||||
using Android.Graphics;
|
using Android.Graphics;
|
||||||
|
using Android.Views;
|
||||||
using Pixiview.Droid.Renderers;
|
using Pixiview.Droid.Renderers;
|
||||||
using Pixiview.UI;
|
using Pixiview.UI;
|
||||||
using Xamarin.Forms;
|
using Xamarin.Forms;
|
||||||
@ -24,19 +26,59 @@ namespace Pixiview.Droid.Renderers
|
|||||||
var radius = element.CornerRadius;
|
var radius = element.CornerRadius;
|
||||||
if (radius > 0)
|
if (radius > 0)
|
||||||
{
|
{
|
||||||
//var scale = Resources.DisplayMetrics.Density;
|
|
||||||
//OutlineProvider = new CornerRadiusOutlineProvider(element, radius, scale);
|
|
||||||
//ClipToOutline = true;
|
|
||||||
|
|
||||||
var density = Resources.DisplayMetrics.Density;
|
var density = Resources.DisplayMetrics.Density;
|
||||||
|
|
||||||
Elevation = (float)(element.ShadowOffset.Height + 2) * density;
|
OutlineProvider = new CornerRadiusOutlineProvider(element, radius, density);
|
||||||
|
ClipToOutline = true;
|
||||||
|
|
||||||
var drawable = new RoundCornerDrawable(radius * density);
|
//var drawable = new RoundCornerDrawable(radius * density);
|
||||||
drawable.SetColorFilter(element.BackgroundColor.ToAndroid(), PorterDuff.Mode.Src);
|
//drawable.SetColorFilter(element.BackgroundColor.ToAndroid(), PorterDuff.Mode.Src);
|
||||||
((Android.Views.View)this).SetBackground(drawable);
|
//((Android.Views.View)this).SetBackground(drawable);
|
||||||
|
|
||||||
|
Elevation = (float)(element.ShadowOffset.Height + 2) * density;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
|
||||||
|
{
|
||||||
|
base.OnElementPropertyChanged(sender, e);
|
||||||
|
|
||||||
|
var element = Element;
|
||||||
|
if (element == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
switch (e.PropertyName)
|
||||||
|
{
|
||||||
|
case nameof(CardView.ShadowOffset):
|
||||||
|
var density = Resources.DisplayMetrics.Density;
|
||||||
|
Elevation = (float)(element.ShadowOffset.Height + 2) * density;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class CornerRadiusOutlineProvider : ViewOutlineProvider
|
||||||
|
{
|
||||||
|
readonly Element element;
|
||||||
|
readonly float radius;
|
||||||
|
readonly float density;
|
||||||
|
|
||||||
|
public CornerRadiusOutlineProvider(Element formsElement, float radius, float density)
|
||||||
|
{
|
||||||
|
element = formsElement;
|
||||||
|
this.radius = radius * density;
|
||||||
|
this.density = density;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void GetOutline(Android.Views.View view, Outline outline)
|
||||||
|
{
|
||||||
|
float scale = density;
|
||||||
|
double width = (double)element.GetValue(VisualElement.WidthProperty) * scale;
|
||||||
|
double height = (double)element.GetValue(VisualElement.HeightProperty) * scale;
|
||||||
|
Rect rect = new Rect(0, 0, (int)width, (int)height);
|
||||||
|
outline.SetRoundRect(rect, radius);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user