Browse Source

add blur support for android s +

pull/9658/head
Emmanuel Hansen 4 years ago
parent
commit
4f05fb47b7
  1. 66
      src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs

66
src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs

@ -27,7 +27,6 @@ using Avalonia.Rendering.Composition;
using Java.Lang; using Java.Lang;
using Math = System.Math; using Math = System.Math;
using AndroidRect = Android.Graphics.Rect; using AndroidRect = Android.Graphics.Rect;
using AndroidX.Core.App;
using Android.Graphics.Drawables; using Android.Graphics.Drawables;
namespace Avalonia.Android.Platform.SkiaPlatform namespace Avalonia.Android.Platform.SkiaPlatform
@ -301,26 +300,81 @@ namespace Avalonia.Android.Platform.SkiaPlatform
{ {
if (TransparencyLevel != transparencyLevel) if (TransparencyLevel != transparencyLevel)
{ {
bool isLegacy = Build.VERSION.SdkInt < BuildVersionCodes.R; bool isBelowR = Build.VERSION.SdkInt < BuildVersionCodes.R;
bool isAboveR = Build.VERSION.SdkInt > BuildVersionCodes.R;
if (_view.Context is AvaloniaMainActivity activity) if (_view.Context is AvaloniaMainActivity activity)
{ {
switch (transparencyLevel) switch (transparencyLevel)
{ {
case WindowTransparencyLevel.AcrylicBlur:
case WindowTransparencyLevel.ForceAcrylicBlur:
case WindowTransparencyLevel.Mica:
case WindowTransparencyLevel.None: case WindowTransparencyLevel.None:
if (!isLegacy) if (!isBelowR)
{ {
activity.SetTranslucent(false); activity.SetTranslucent(false);
} }
if (isAboveR)
{
activity.Window?.ClearFlags(WindowManagerFlags.BlurBehind);
var attr = activity.Window?.Attributes;
if (attr != null)
{
attr.BlurBehindRadius = 0;
activity.Window.Attributes = attr;
}
}
activity.Window.SetBackgroundDrawable(new ColorDrawable(Color.White));
if(transparencyLevel != WindowTransparencyLevel.None)
{
return;
}
break; break;
case WindowTransparencyLevel.Transparent: case WindowTransparencyLevel.Transparent:
if (!isLegacy) if (!isBelowR)
{ {
activity.SetTranslucent(true); activity.SetTranslucent(true);
} }
if (isAboveR)
{
activity.Window?.ClearFlags(WindowManagerFlags.BlurBehind);
var attr = activity.Window?.Attributes;
if (attr != null)
{
attr.BlurBehindRadius = 0;
activity.Window.Attributes = attr;
}
}
activity.Window.SetBackgroundDrawable(new ColorDrawable(Color.Transparent)); activity.Window.SetBackgroundDrawable(new ColorDrawable(Color.Transparent));
break; break;
default: case WindowTransparencyLevel.Blur:
return; if (isAboveR)
{
activity.SetTranslucent(true);
activity.Window?.AddFlags(WindowManagerFlags.BlurBehind);
var attr = activity.Window?.Attributes;
if (attr != null)
{
attr.BlurBehindRadius = 120;
activity.Window.Attributes = attr;
}
activity.Window.SetBackgroundDrawable(new ColorDrawable(Color.Transparent));
}
else
{
activity.Window?.ClearFlags(WindowManagerFlags.BlurBehind);
activity.Window.SetBackgroundDrawable(new ColorDrawable(Color.White));
return;
}
break;
} }
TransparencyLevel = transparencyLevel; TransparencyLevel = transparencyLevel;
} }

Loading…
Cancel
Save