committed by
GitHub
91 changed files with 1362 additions and 666 deletions
@ -0,0 +1,66 @@ |
|||
<animated-vector |
|||
xmlns:android="http://schemas.android.com/apk/res/android" |
|||
xmlns:aapt="http://schemas.android.com/aapt"> |
|||
<aapt:attr name="android:drawable"> |
|||
<vector |
|||
android:name="vector" |
|||
android:width="128dp" |
|||
android:height="128dp" |
|||
android:viewportWidth="128" |
|||
android:viewportHeight="128"> |
|||
<group |
|||
android:name="wrapper" |
|||
android:translateX="21" |
|||
android:translateY="21"> |
|||
<group android:name="group"> |
|||
<path |
|||
android:name="path" |
|||
android:pathData="M 74.853 85.823 L 75.368 85.823 C 80.735 85.823 85.144 81.803 85.761 76.602 L 85.836 41.76 C 85.225 18.593 66.254 0 42.939 0 C 19.24 0 0.028 19.212 0.028 42.912 C 0.028 66.357 18.831 85.418 42.18 85.823 L 74.853 85.823 Z" |
|||
android:strokeWidth="1"/> |
|||
<path |
|||
android:name="path_1" |
|||
android:pathData="M 43.059 14.614 C 29.551 14.614 18.256 24.082 15.445 36.743 C 18.136 37.498 20.109 39.968 20.109 42.899 C 20.109 45.831 18.136 48.301 15.445 49.055 C 18.256 61.716 29.551 71.184 43.059 71.184 C 47.975 71.184 52.599 69.93 56.628 67.723 L 56.628 70.993 L 71.344 70.993 L 71.344 44.072 C 71.357 43.714 71.344 43.26 71.344 42.899 C 71.344 27.278 58.68 14.614 43.059 14.614 Z M 29.51 42.899 C 29.51 35.416 35.576 29.35 43.059 29.35 C 50.541 29.35 56.607 35.416 56.607 42.899 C 56.607 50.382 50.541 56.448 43.059 56.448 C 35.576 56.448 29.51 50.382 29.51 42.899 Z" |
|||
android:strokeWidth="1" |
|||
android:fillType="evenOdd"/> |
|||
<path |
|||
android:name="path_2" |
|||
android:pathData="M 18.105 42.88 C 18.105 45.38 16.078 47.407 13.579 47.407 C 11.079 47.407 9.052 45.38 9.052 42.88 C 9.052 40.381 11.079 38.354 13.579 38.354 C 16.078 38.354 18.105 40.381 18.105 42.88 Z" |
|||
android:strokeWidth="1"/> |
|||
</group> |
|||
</group> |
|||
</vector> |
|||
</aapt:attr> |
|||
<target android:name="path"> |
|||
<aapt:attr name="android:animation"> |
|||
<objectAnimator |
|||
android:propertyName="fillColor" |
|||
android:duration="1000" |
|||
android:valueFrom="#00ffffff" |
|||
android:valueTo="#161c2d" |
|||
android:valueType="colorType" |
|||
android:interpolator="@android:interpolator/fast_out_slow_in"/> |
|||
</aapt:attr> |
|||
</target> |
|||
<target android:name="path_1"> |
|||
<aapt:attr name="android:animation"> |
|||
<objectAnimator |
|||
android:propertyName="fillColor" |
|||
android:duration="1000" |
|||
android:valueFrom="#00ffffff" |
|||
android:valueTo="#f9f9fb" |
|||
android:valueType="colorType" |
|||
android:interpolator="@android:interpolator/fast_out_slow_in"/> |
|||
</aapt:attr> |
|||
</target> |
|||
<target android:name="path_2"> |
|||
<aapt:attr name="android:animation"> |
|||
<objectAnimator |
|||
android:propertyName="fillColor" |
|||
android:duration="1000" |
|||
android:valueFrom="#00ffffff" |
|||
android:valueTo="#f9f9fb" |
|||
android:valueType="colorType" |
|||
android:interpolator="@android:interpolator/fast_out_slow_in"/> |
|||
</aapt:attr> |
|||
</target> |
|||
</animated-vector> |
|||
@ -0,0 +1,71 @@ |
|||
<animated-vector |
|||
xmlns:android="http://schemas.android.com/apk/res/android" |
|||
xmlns:aapt="http://schemas.android.com/aapt"> |
|||
<aapt:attr name="android:drawable"> |
|||
<vector |
|||
android:name="vector" |
|||
android:width="128dp" |
|||
android:height="128dp" |
|||
android:viewportWidth="128" |
|||
android:viewportHeight="128"> |
|||
<group |
|||
android:name="wrapper" |
|||
android:translateX="21" |
|||
android:translateY="21"> |
|||
<group android:name="group"> |
|||
<path |
|||
android:name="path" |
|||
android:pathData="M 74.853 85.823 L 75.368 85.823 C 80.735 85.823 85.144 81.803 85.761 76.602 L 85.836 41.76 C 85.225 18.593 66.254 0 42.939 0 C 19.24 0 0.028 19.212 0.028 42.912 C 0.028 66.357 18.831 85.418 42.18 85.823 L 74.853 85.823 Z" |
|||
android:fillColor="#00ffffff" |
|||
android:strokeWidth="1"/> |
|||
<path |
|||
android:name="path_1" |
|||
android:pathData="M 43.059 14.614 C 29.551 14.614 18.256 24.082 15.445 36.743 C 18.136 37.498 20.109 39.968 20.109 42.899 C 20.109 45.831 18.136 48.301 15.445 49.055 C 18.256 61.716 29.551 71.184 43.059 71.184 C 47.975 71.184 52.599 69.93 56.628 67.723 L 56.628 70.993 L 71.344 70.993 L 71.344 44.072 C 71.357 43.714 71.344 43.26 71.344 42.899 C 71.344 27.278 58.68 14.614 43.059 14.614 Z M 29.51 42.899 C 29.51 35.416 35.576 29.35 43.059 29.35 C 50.541 29.35 56.607 35.416 56.607 42.899 C 56.607 50.382 50.541 56.448 43.059 56.448 C 35.576 56.448 29.51 50.382 29.51 42.899 Z" |
|||
android:fillColor="#00ffffff" |
|||
android:strokeWidth="1" |
|||
android:fillType="evenOdd"/> |
|||
<path |
|||
android:name="path_2" |
|||
android:pathData="M 18.105 42.88 C 18.105 45.38 16.078 47.407 13.579 47.407 C 11.079 47.407 9.052 45.38 9.052 42.88 C 9.052 40.381 11.079 38.354 13.579 38.354 C 16.078 38.354 18.105 40.381 18.105 42.88 Z" |
|||
android:fillColor="#00ffffff" |
|||
android:strokeWidth="1"/> |
|||
</group> |
|||
</group> |
|||
</vector> |
|||
</aapt:attr> |
|||
<target android:name="path_2"> |
|||
<aapt:attr name="android:animation"> |
|||
<objectAnimator |
|||
android:propertyName="fillColor" |
|||
android:startOffset="100" |
|||
android:duration="900" |
|||
android:valueFrom="#00ffffff" |
|||
android:valueTo="#161c2d" |
|||
android:valueType="colorType" |
|||
android:interpolator="@android:interpolator/fast_out_slow_in"/> |
|||
</aapt:attr> |
|||
</target> |
|||
<target android:name="path"> |
|||
<aapt:attr name="android:animation"> |
|||
<objectAnimator |
|||
android:propertyName="fillColor" |
|||
android:duration="500" |
|||
android:valueFrom="#00ffffff" |
|||
android:valueTo="#f9f9fb" |
|||
android:valueType="colorType" |
|||
android:interpolator="@android:interpolator/fast_out_slow_in"/> |
|||
</aapt:attr> |
|||
</target> |
|||
<target android:name="path_1"> |
|||
<aapt:attr name="android:animation"> |
|||
<objectAnimator |
|||
android:propertyName="fillColor" |
|||
android:startOffset="100" |
|||
android:duration="900" |
|||
android:valueFrom="#00ffffff" |
|||
android:valueTo="#161c2d" |
|||
android:valueType="colorType" |
|||
android:interpolator="@android:interpolator/fast_out_slow_in"/> |
|||
</aapt:attr> |
|||
</target> |
|||
</animated-vector> |
|||
@ -0,0 +1,21 @@ |
|||
<?xml version="1.0" encoding="utf-8" ?> |
|||
<resources> |
|||
|
|||
<style name="MyTheme"> |
|||
</style> |
|||
|
|||
<style name="MyTheme.NoActionBar" parent="@style/Theme.AppCompat.NoActionBar"> |
|||
<item name="android:windowActionBar">false</item> |
|||
<item name="android:windowBackground">@null</item> |
|||
<item name="android:windowNoTitle">true</item> |
|||
<item name="android:windowSplashScreenBackground">@color/splash_background</item> |
|||
<item name="android:windowSplashScreenAnimatedIcon">@drawable/avalonia_anim</item> |
|||
<item name="android:windowSplashScreenAnimationDuration">1000</item> |
|||
<item name="postSplashScreenTheme">@style/MyTheme.Main</item> |
|||
|
|||
</style> |
|||
<style name="MyTheme.Main" |
|||
parent ="MyTheme.NoActionBar"> |
|||
<item name="android:windowIsTranslucent">true</item> |
|||
</style> |
|||
</resources> |
|||
@ -1,35 +0,0 @@ |
|||
using Android.App; |
|||
using Android.Content; |
|||
using Android.Content.PM; |
|||
using Android.OS; |
|||
using Avalonia.Android; |
|||
|
|||
namespace ControlCatalog.Android |
|||
{ |
|||
[Activity(Theme = "@style/MyTheme.Splash", MainLauncher = true, NoHistory = true)] |
|||
public class SplashActivity : AvaloniaSplashActivity<App> |
|||
{ |
|||
protected override Avalonia.AppBuilder CustomizeAppBuilder(Avalonia.AppBuilder builder) |
|||
{ |
|||
return base.CustomizeAppBuilder(builder) |
|||
.AfterSetup(_ => |
|||
{ |
|||
Pages.EmbedSample.Implementation = new EmbedSampleAndroid(); |
|||
}); |
|||
} |
|||
|
|||
protected override void OnCreate(Bundle? savedInstanceState) |
|||
{ |
|||
base.OnCreate(savedInstanceState); |
|||
} |
|||
|
|||
protected override void OnResume() |
|||
{ |
|||
base.OnResume(); |
|||
|
|||
StartActivity(new Intent(Application.Context, typeof(MainActivity))); |
|||
|
|||
Finish(); |
|||
} |
|||
} |
|||
} |
|||
@ -1,12 +1,11 @@ |
|||
using Android.App; |
|||
using Android.Content.PM; |
|||
using Avalonia; |
|||
using Avalonia.Android; |
|||
|
|||
namespace MobileSandbox.Android |
|||
{ |
|||
[Activity(Label = "MobileSandbox.Android", Theme = "@style/MyTheme.NoActionBar", Icon = "@drawable/icon", LaunchMode = LaunchMode.SingleTop, ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize)] |
|||
public class MainActivity : AvaloniaMainActivity |
|||
[Activity(Label = "MobileSandbox.Android", Theme = "@style/MyTheme.NoActionBar", Icon = "@drawable/icon", MainLauncher = true, ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize)] |
|||
public class MainActivity : AvaloniaMainActivity<App> |
|||
{ |
|||
} |
|||
} |
|||
|
|||
@ -0,0 +1,66 @@ |
|||
<animated-vector |
|||
xmlns:android="http://schemas.android.com/apk/res/android" |
|||
xmlns:aapt="http://schemas.android.com/aapt"> |
|||
<aapt:attr name="android:drawable"> |
|||
<vector |
|||
android:name="vector" |
|||
android:width="128dp" |
|||
android:height="128dp" |
|||
android:viewportWidth="128" |
|||
android:viewportHeight="128"> |
|||
<group |
|||
android:name="wrapper" |
|||
android:translateX="21" |
|||
android:translateY="21"> |
|||
<group android:name="group"> |
|||
<path |
|||
android:name="path" |
|||
android:pathData="M 74.853 85.823 L 75.368 85.823 C 80.735 85.823 85.144 81.803 85.761 76.602 L 85.836 41.76 C 85.225 18.593 66.254 0 42.939 0 C 19.24 0 0.028 19.212 0.028 42.912 C 0.028 66.357 18.831 85.418 42.18 85.823 L 74.853 85.823 Z" |
|||
android:strokeWidth="1"/> |
|||
<path |
|||
android:name="path_1" |
|||
android:pathData="M 43.059 14.614 C 29.551 14.614 18.256 24.082 15.445 36.743 C 18.136 37.498 20.109 39.968 20.109 42.899 C 20.109 45.831 18.136 48.301 15.445 49.055 C 18.256 61.716 29.551 71.184 43.059 71.184 C 47.975 71.184 52.599 69.93 56.628 67.723 L 56.628 70.993 L 71.344 70.993 L 71.344 44.072 C 71.357 43.714 71.344 43.26 71.344 42.899 C 71.344 27.278 58.68 14.614 43.059 14.614 Z M 29.51 42.899 C 29.51 35.416 35.576 29.35 43.059 29.35 C 50.541 29.35 56.607 35.416 56.607 42.899 C 56.607 50.382 50.541 56.448 43.059 56.448 C 35.576 56.448 29.51 50.382 29.51 42.899 Z" |
|||
android:strokeWidth="1" |
|||
android:fillType="evenOdd"/> |
|||
<path |
|||
android:name="path_2" |
|||
android:pathData="M 18.105 42.88 C 18.105 45.38 16.078 47.407 13.579 47.407 C 11.079 47.407 9.052 45.38 9.052 42.88 C 9.052 40.381 11.079 38.354 13.579 38.354 C 16.078 38.354 18.105 40.381 18.105 42.88 Z" |
|||
android:strokeWidth="1"/> |
|||
</group> |
|||
</group> |
|||
</vector> |
|||
</aapt:attr> |
|||
<target android:name="path"> |
|||
<aapt:attr name="android:animation"> |
|||
<objectAnimator |
|||
android:propertyName="fillColor" |
|||
android:duration="1000" |
|||
android:valueFrom="#00ffffff" |
|||
android:valueTo="#161c2d" |
|||
android:valueType="colorType" |
|||
android:interpolator="@android:interpolator/fast_out_slow_in"/> |
|||
</aapt:attr> |
|||
</target> |
|||
<target android:name="path_1"> |
|||
<aapt:attr name="android:animation"> |
|||
<objectAnimator |
|||
android:propertyName="fillColor" |
|||
android:duration="1000" |
|||
android:valueFrom="#00ffffff" |
|||
android:valueTo="#f9f9fb" |
|||
android:valueType="colorType" |
|||
android:interpolator="@android:interpolator/fast_out_slow_in"/> |
|||
</aapt:attr> |
|||
</target> |
|||
<target android:name="path_2"> |
|||
<aapt:attr name="android:animation"> |
|||
<objectAnimator |
|||
android:propertyName="fillColor" |
|||
android:duration="1000" |
|||
android:valueFrom="#00ffffff" |
|||
android:valueTo="#f9f9fb" |
|||
android:valueType="colorType" |
|||
android:interpolator="@android:interpolator/fast_out_slow_in"/> |
|||
</aapt:attr> |
|||
</target> |
|||
</animated-vector> |
|||
@ -0,0 +1,71 @@ |
|||
<animated-vector |
|||
xmlns:android="http://schemas.android.com/apk/res/android" |
|||
xmlns:aapt="http://schemas.android.com/aapt"> |
|||
<aapt:attr name="android:drawable"> |
|||
<vector |
|||
android:name="vector" |
|||
android:width="128dp" |
|||
android:height="128dp" |
|||
android:viewportWidth="128" |
|||
android:viewportHeight="128"> |
|||
<group |
|||
android:name="wrapper" |
|||
android:translateX="21" |
|||
android:translateY="21"> |
|||
<group android:name="group"> |
|||
<path |
|||
android:name="path" |
|||
android:pathData="M 74.853 85.823 L 75.368 85.823 C 80.735 85.823 85.144 81.803 85.761 76.602 L 85.836 41.76 C 85.225 18.593 66.254 0 42.939 0 C 19.24 0 0.028 19.212 0.028 42.912 C 0.028 66.357 18.831 85.418 42.18 85.823 L 74.853 85.823 Z" |
|||
android:fillColor="#00ffffff" |
|||
android:strokeWidth="1"/> |
|||
<path |
|||
android:name="path_1" |
|||
android:pathData="M 43.059 14.614 C 29.551 14.614 18.256 24.082 15.445 36.743 C 18.136 37.498 20.109 39.968 20.109 42.899 C 20.109 45.831 18.136 48.301 15.445 49.055 C 18.256 61.716 29.551 71.184 43.059 71.184 C 47.975 71.184 52.599 69.93 56.628 67.723 L 56.628 70.993 L 71.344 70.993 L 71.344 44.072 C 71.357 43.714 71.344 43.26 71.344 42.899 C 71.344 27.278 58.68 14.614 43.059 14.614 Z M 29.51 42.899 C 29.51 35.416 35.576 29.35 43.059 29.35 C 50.541 29.35 56.607 35.416 56.607 42.899 C 56.607 50.382 50.541 56.448 43.059 56.448 C 35.576 56.448 29.51 50.382 29.51 42.899 Z" |
|||
android:fillColor="#00ffffff" |
|||
android:strokeWidth="1" |
|||
android:fillType="evenOdd"/> |
|||
<path |
|||
android:name="path_2" |
|||
android:pathData="M 18.105 42.88 C 18.105 45.38 16.078 47.407 13.579 47.407 C 11.079 47.407 9.052 45.38 9.052 42.88 C 9.052 40.381 11.079 38.354 13.579 38.354 C 16.078 38.354 18.105 40.381 18.105 42.88 Z" |
|||
android:fillColor="#00ffffff" |
|||
android:strokeWidth="1"/> |
|||
</group> |
|||
</group> |
|||
</vector> |
|||
</aapt:attr> |
|||
<target android:name="path_2"> |
|||
<aapt:attr name="android:animation"> |
|||
<objectAnimator |
|||
android:propertyName="fillColor" |
|||
android:startOffset="100" |
|||
android:duration="900" |
|||
android:valueFrom="#00ffffff" |
|||
android:valueTo="#161c2d" |
|||
android:valueType="colorType" |
|||
android:interpolator="@android:interpolator/fast_out_slow_in"/> |
|||
</aapt:attr> |
|||
</target> |
|||
<target android:name="path"> |
|||
<aapt:attr name="android:animation"> |
|||
<objectAnimator |
|||
android:propertyName="fillColor" |
|||
android:duration="500" |
|||
android:valueFrom="#00ffffff" |
|||
android:valueTo="#f9f9fb" |
|||
android:valueType="colorType" |
|||
android:interpolator="@android:interpolator/fast_out_slow_in"/> |
|||
</aapt:attr> |
|||
</target> |
|||
<target android:name="path_1"> |
|||
<aapt:attr name="android:animation"> |
|||
<objectAnimator |
|||
android:propertyName="fillColor" |
|||
android:startOffset="100" |
|||
android:duration="900" |
|||
android:valueFrom="#00ffffff" |
|||
android:valueTo="#161c2d" |
|||
android:valueType="colorType" |
|||
android:interpolator="@android:interpolator/fast_out_slow_in"/> |
|||
</aapt:attr> |
|||
</target> |
|||
</animated-vector> |
|||
@ -0,0 +1,4 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<resources> |
|||
<color name="splash_background">#212121</color> |
|||
</resources> |
|||
@ -0,0 +1,16 @@ |
|||
<?xml version="1.0" encoding="utf-8" ?> |
|||
<resources> |
|||
|
|||
<style name="MyTheme"> |
|||
</style> |
|||
|
|||
<style name="MyTheme.NoActionBar" parent="@style/Theme.AppCompat.NoActionBar"> |
|||
<item name="android:windowActionBar">false</item> |
|||
<item name="android:windowBackground">@null</item> |
|||
<item name="android:windowNoTitle">true</item> |
|||
<item name="android:windowSplashScreenBackground">@color/splash_background</item> |
|||
<item name="android:windowSplashScreenAnimatedIcon">@drawable/avalonia_anim</item> |
|||
<item name="android:windowSplashScreenAnimationDuration">1000</item> |
|||
|
|||
</style> |
|||
</resources> |
|||
@ -1,17 +0,0 @@ |
|||
using Android.App; |
|||
using Android.Content; |
|||
using Avalonia.Android; |
|||
|
|||
namespace MobileSandbox.Android |
|||
{ |
|||
[Activity(Theme = "@style/MyTheme.Splash", MainLauncher = true, NoHistory = true)] |
|||
public class SplashActivity : AvaloniaSplashActivity<App> |
|||
{ |
|||
protected override void OnResume() |
|||
{ |
|||
base.OnResume(); |
|||
|
|||
StartActivity(new Intent(Application.Context, typeof(MainActivity))); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,66 @@ |
|||
<animated-vector |
|||
xmlns:android="http://schemas.android.com/apk/res/android" |
|||
xmlns:aapt="http://schemas.android.com/aapt"> |
|||
<aapt:attr name="android:drawable"> |
|||
<vector |
|||
android:name="vector" |
|||
android:width="128dp" |
|||
android:height="128dp" |
|||
android:viewportWidth="128" |
|||
android:viewportHeight="128"> |
|||
<group |
|||
android:name="wrapper" |
|||
android:translateX="21" |
|||
android:translateY="21"> |
|||
<group android:name="group"> |
|||
<path |
|||
android:name="path" |
|||
android:pathData="M 74.853 85.823 L 75.368 85.823 C 80.735 85.823 85.144 81.803 85.761 76.602 L 85.836 41.76 C 85.225 18.593 66.254 0 42.939 0 C 19.24 0 0.028 19.212 0.028 42.912 C 0.028 66.357 18.831 85.418 42.18 85.823 L 74.853 85.823 Z" |
|||
android:strokeWidth="1"/> |
|||
<path |
|||
android:name="path_1" |
|||
android:pathData="M 43.059 14.614 C 29.551 14.614 18.256 24.082 15.445 36.743 C 18.136 37.498 20.109 39.968 20.109 42.899 C 20.109 45.831 18.136 48.301 15.445 49.055 C 18.256 61.716 29.551 71.184 43.059 71.184 C 47.975 71.184 52.599 69.93 56.628 67.723 L 56.628 70.993 L 71.344 70.993 L 71.344 44.072 C 71.357 43.714 71.344 43.26 71.344 42.899 C 71.344 27.278 58.68 14.614 43.059 14.614 Z M 29.51 42.899 C 29.51 35.416 35.576 29.35 43.059 29.35 C 50.541 29.35 56.607 35.416 56.607 42.899 C 56.607 50.382 50.541 56.448 43.059 56.448 C 35.576 56.448 29.51 50.382 29.51 42.899 Z" |
|||
android:strokeWidth="1" |
|||
android:fillType="evenOdd"/> |
|||
<path |
|||
android:name="path_2" |
|||
android:pathData="M 18.105 42.88 C 18.105 45.38 16.078 47.407 13.579 47.407 C 11.079 47.407 9.052 45.38 9.052 42.88 C 9.052 40.381 11.079 38.354 13.579 38.354 C 16.078 38.354 18.105 40.381 18.105 42.88 Z" |
|||
android:strokeWidth="1"/> |
|||
</group> |
|||
</group> |
|||
</vector> |
|||
</aapt:attr> |
|||
<target android:name="path"> |
|||
<aapt:attr name="android:animation"> |
|||
<objectAnimator |
|||
android:propertyName="fillColor" |
|||
android:duration="1000" |
|||
android:valueFrom="#00ffffff" |
|||
android:valueTo="#161c2d" |
|||
android:valueType="colorType" |
|||
android:interpolator="@android:interpolator/fast_out_slow_in"/> |
|||
</aapt:attr> |
|||
</target> |
|||
<target android:name="path_1"> |
|||
<aapt:attr name="android:animation"> |
|||
<objectAnimator |
|||
android:propertyName="fillColor" |
|||
android:duration="1000" |
|||
android:valueFrom="#00ffffff" |
|||
android:valueTo="#f9f9fb" |
|||
android:valueType="colorType" |
|||
android:interpolator="@android:interpolator/fast_out_slow_in"/> |
|||
</aapt:attr> |
|||
</target> |
|||
<target android:name="path_2"> |
|||
<aapt:attr name="android:animation"> |
|||
<objectAnimator |
|||
android:propertyName="fillColor" |
|||
android:duration="1000" |
|||
android:valueFrom="#00ffffff" |
|||
android:valueTo="#f9f9fb" |
|||
android:valueType="colorType" |
|||
android:interpolator="@android:interpolator/fast_out_slow_in"/> |
|||
</aapt:attr> |
|||
</target> |
|||
</animated-vector> |
|||
@ -0,0 +1,71 @@ |
|||
<animated-vector |
|||
xmlns:android="http://schemas.android.com/apk/res/android" |
|||
xmlns:aapt="http://schemas.android.com/aapt"> |
|||
<aapt:attr name="android:drawable"> |
|||
<vector |
|||
android:name="vector" |
|||
android:width="128dp" |
|||
android:height="128dp" |
|||
android:viewportWidth="128" |
|||
android:viewportHeight="128"> |
|||
<group |
|||
android:name="wrapper" |
|||
android:translateX="21" |
|||
android:translateY="21"> |
|||
<group android:name="group"> |
|||
<path |
|||
android:name="path" |
|||
android:pathData="M 74.853 85.823 L 75.368 85.823 C 80.735 85.823 85.144 81.803 85.761 76.602 L 85.836 41.76 C 85.225 18.593 66.254 0 42.939 0 C 19.24 0 0.028 19.212 0.028 42.912 C 0.028 66.357 18.831 85.418 42.18 85.823 L 74.853 85.823 Z" |
|||
android:fillColor="#00ffffff" |
|||
android:strokeWidth="1"/> |
|||
<path |
|||
android:name="path_1" |
|||
android:pathData="M 43.059 14.614 C 29.551 14.614 18.256 24.082 15.445 36.743 C 18.136 37.498 20.109 39.968 20.109 42.899 C 20.109 45.831 18.136 48.301 15.445 49.055 C 18.256 61.716 29.551 71.184 43.059 71.184 C 47.975 71.184 52.599 69.93 56.628 67.723 L 56.628 70.993 L 71.344 70.993 L 71.344 44.072 C 71.357 43.714 71.344 43.26 71.344 42.899 C 71.344 27.278 58.68 14.614 43.059 14.614 Z M 29.51 42.899 C 29.51 35.416 35.576 29.35 43.059 29.35 C 50.541 29.35 56.607 35.416 56.607 42.899 C 56.607 50.382 50.541 56.448 43.059 56.448 C 35.576 56.448 29.51 50.382 29.51 42.899 Z" |
|||
android:fillColor="#00ffffff" |
|||
android:strokeWidth="1" |
|||
android:fillType="evenOdd"/> |
|||
<path |
|||
android:name="path_2" |
|||
android:pathData="M 18.105 42.88 C 18.105 45.38 16.078 47.407 13.579 47.407 C 11.079 47.407 9.052 45.38 9.052 42.88 C 9.052 40.381 11.079 38.354 13.579 38.354 C 16.078 38.354 18.105 40.381 18.105 42.88 Z" |
|||
android:fillColor="#00ffffff" |
|||
android:strokeWidth="1"/> |
|||
</group> |
|||
</group> |
|||
</vector> |
|||
</aapt:attr> |
|||
<target android:name="path_2"> |
|||
<aapt:attr name="android:animation"> |
|||
<objectAnimator |
|||
android:propertyName="fillColor" |
|||
android:startOffset="100" |
|||
android:duration="900" |
|||
android:valueFrom="#00ffffff" |
|||
android:valueTo="#161c2d" |
|||
android:valueType="colorType" |
|||
android:interpolator="@android:interpolator/fast_out_slow_in"/> |
|||
</aapt:attr> |
|||
</target> |
|||
<target android:name="path"> |
|||
<aapt:attr name="android:animation"> |
|||
<objectAnimator |
|||
android:propertyName="fillColor" |
|||
android:duration="500" |
|||
android:valueFrom="#00ffffff" |
|||
android:valueTo="#f9f9fb" |
|||
android:valueType="colorType" |
|||
android:interpolator="@android:interpolator/fast_out_slow_in"/> |
|||
</aapt:attr> |
|||
</target> |
|||
<target android:name="path_1"> |
|||
<aapt:attr name="android:animation"> |
|||
<objectAnimator |
|||
android:propertyName="fillColor" |
|||
android:startOffset="100" |
|||
android:duration="900" |
|||
android:valueFrom="#00ffffff" |
|||
android:valueTo="#161c2d" |
|||
android:valueType="colorType" |
|||
android:interpolator="@android:interpolator/fast_out_slow_in"/> |
|||
</aapt:attr> |
|||
</target> |
|||
</animated-vector> |
|||
@ -0,0 +1,4 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<resources> |
|||
<color name="splash_background">#212121</color> |
|||
</resources> |
|||
@ -0,0 +1,16 @@ |
|||
<?xml version="1.0" encoding="utf-8" ?> |
|||
<resources> |
|||
|
|||
<style name="MyTheme"> |
|||
</style> |
|||
|
|||
<style name="MyTheme.NoActionBar" parent="@style/Theme.AppCompat.NoActionBar"> |
|||
<item name="android:windowActionBar">false</item> |
|||
<item name="android:windowBackground">@null</item> |
|||
<item name="android:windowNoTitle">true</item> |
|||
<item name="android:windowSplashScreenBackground">@color/splash_background</item> |
|||
<item name="android:windowSplashScreenAnimatedIcon">@drawable/avalonia_anim</item> |
|||
<item name="android:windowSplashScreenAnimationDuration">1000</item> |
|||
|
|||
</style> |
|||
</resources> |
|||
@ -1,30 +0,0 @@ |
|||
using Android.App; |
|||
using Android.Content; |
|||
using Android.OS; |
|||
using Avalonia; |
|||
using Avalonia.Android; |
|||
using Application = Android.App.Application; |
|||
|
|||
namespace SafeAreaDemo.Android |
|||
{ |
|||
[Activity(Theme = "@style/MyTheme.Splash", MainLauncher = true, NoHistory = true)] |
|||
public class SplashActivity : AvaloniaSplashActivity<App> |
|||
{ |
|||
protected override AppBuilder CustomizeAppBuilder(AppBuilder builder) |
|||
{ |
|||
return base.CustomizeAppBuilder(builder); |
|||
} |
|||
|
|||
protected override void OnCreate(Bundle? savedInstanceState) |
|||
{ |
|||
base.OnCreate(savedInstanceState); |
|||
} |
|||
|
|||
protected override void OnResume() |
|||
{ |
|||
base.OnResume(); |
|||
|
|||
StartActivity(new Intent(Application.Context, typeof(MainActivity))); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,60 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Avalonia.Android |
|||
{ |
|||
partial class AvaloniaMainActivity<TApp> where TApp : Application, new() |
|||
{ |
|||
protected virtual AppBuilder CustomizeAppBuilder(AppBuilder builder) => builder.UseAndroid(); |
|||
|
|||
private static AppBuilder? s_appBuilder; |
|||
internal static object ViewContent; |
|||
|
|||
public object Content |
|||
{ |
|||
get |
|||
{ |
|||
return ViewContent; |
|||
} |
|||
set |
|||
{ |
|||
ViewContent = value; |
|||
if (View != null) |
|||
View.Content = value; |
|||
} |
|||
} |
|||
|
|||
protected AppBuilder CreateAppBuilder() |
|||
{ |
|||
var builder = AppBuilder.Configure<TApp>(); |
|||
|
|||
return CustomizeAppBuilder(builder); |
|||
} |
|||
|
|||
private void InitializeApp() |
|||
{ |
|||
if (s_appBuilder == null) |
|||
{ |
|||
var builder = CreateAppBuilder(); |
|||
|
|||
builder.SetupWithLifetime(new SingleViewLifetime()); |
|||
|
|||
s_appBuilder = builder; |
|||
} |
|||
|
|||
View = new AvaloniaView(this); |
|||
if (ViewContent != null) |
|||
{ |
|||
View.Content = ViewContent; |
|||
} |
|||
|
|||
if (Avalonia.Application.Current.ApplicationLifetime is SingleViewLifetime lifetime) |
|||
{ |
|||
lifetime.View = View; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
@ -1,40 +0,0 @@ |
|||
using Android.OS; |
|||
using AndroidX.AppCompat.App; |
|||
|
|||
namespace Avalonia.Android |
|||
{ |
|||
public abstract class AvaloniaSplashActivity : AppCompatActivity |
|||
{ |
|||
protected abstract AppBuilder CreateAppBuilder(); |
|||
|
|||
private static AppBuilder s_appBuilder; |
|||
|
|||
protected override void OnCreate(Bundle? savedInstanceState) |
|||
{ |
|||
base.OnCreate(savedInstanceState); |
|||
|
|||
if (s_appBuilder == null) |
|||
{ |
|||
var builder = CreateAppBuilder(); |
|||
|
|||
var lifetime = new SingleViewLifetime(); |
|||
|
|||
builder.SetupWithLifetime(lifetime); |
|||
|
|||
s_appBuilder = builder; |
|||
} |
|||
} |
|||
} |
|||
|
|||
public abstract class AvaloniaSplashActivity<TApp> : AvaloniaSplashActivity where TApp : Application, new() |
|||
{ |
|||
protected virtual AppBuilder CustomizeAppBuilder(AppBuilder builder) => builder.UseAndroid(); |
|||
|
|||
protected override AppBuilder CreateAppBuilder() |
|||
{ |
|||
var builder = AppBuilder.Configure<TApp>(); |
|||
|
|||
return CustomizeAppBuilder(builder); |
|||
} |
|||
} |
|||
} |
|||
@ -1,22 +1,25 @@ |
|||
<Styles xmlns="https://github.com/avaloniaui" |
|||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
|||
x:ClassModifier="internal"> |
|||
<Style Selector="TextBlock" > |
|||
<Setter Property="FontSize" Value="14" /> |
|||
</Style> |
|||
<Styles.Resources> |
|||
<x:Double x:Key="ControlContentThemeFontSize">14</x:Double> |
|||
<x:Double x:Key="ContentControlFontSize">14</x:Double> |
|||
<x:Double x:Key="TextControlThemeMinHeight">24</x:Double> |
|||
<Thickness x:Key="TextControlThemePadding">2,2,6,1</Thickness> |
|||
<x:Double x:Key="ListViewItemMinHeight">32</x:Double> |
|||
<x:Double x:Key="TreeViewItemMinHeight">24</x:Double> |
|||
<Thickness x:Key="TimePickerHostPadding">0,1,0,2</Thickness> |
|||
<Thickness x:Key="DatePickerHostPadding">0,1,0,2</Thickness> |
|||
<Thickness x:Key="DatePickerHostMonthPadding">9,0,0,1</Thickness> |
|||
<Thickness x:Key="ComboBoxEditableTextPadding">10,0,30,0</Thickness> |
|||
<x:Double x:Key="ComboBoxMinHeight">24</x:Double> |
|||
<Thickness x:Key="ComboBoxPadding">12,1,0,3</Thickness> |
|||
<x:Double x:Key="NavigationViewItemOnLeftMinHeight">32</x:Double> |
|||
</Styles.Resources> |
|||
</Styles> |
|||
<ResourceDictionary xmlns="https://github.com/avaloniaui" |
|||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
|||
x:ClassModifier="internal"> |
|||
<x:Double x:Key="ControlContentThemeFontSize">14</x:Double> |
|||
<x:Double x:Key="ContentControlFontSize">14</x:Double> |
|||
<x:Double x:Key="TextControlThemeMinHeight">24</x:Double> |
|||
<x:Double x:Key="TextControlThemeMinWidth">32</x:Double> |
|||
<Thickness x:Key="TextControlThemePadding">4, 2</Thickness> |
|||
<Thickness x:Key="ListBoxItemPadding">4,2</Thickness> |
|||
<x:Double x:Key="ListViewItemMinHeight">24</x:Double> |
|||
<Thickness x:Key="ComboBoxItemThemePadding">11,5,11,7</Thickness> |
|||
<Thickness x:Key="MenuFlyoutItemThemePaddingNarrow">4 4 8 4</Thickness> |
|||
<Thickness x:Key="MenuBarItemPadding">5, 2</Thickness> |
|||
<x:Double x:Key="TreeViewItemMinHeight">24</x:Double> |
|||
<Thickness x:Key="TimePickerHostPadding">0,1,0,2</Thickness> |
|||
<Thickness x:Key="DatePickerHostPadding">0,1,0,2</Thickness> |
|||
<Thickness x:Key="DatePickerHostMonthPadding">9,0,0,1</Thickness> |
|||
<Thickness x:Key="ComboBoxEditableTextPadding">10,0,30,0</Thickness> |
|||
<x:Double x:Key="ComboBoxMinHeight">24</x:Double> |
|||
<Thickness x:Key="ComboBoxPadding">12,1,0,3</Thickness> |
|||
<x:Double x:Key="NavigationViewItemOnLeftMinHeight">32</x:Double> |
|||
<x:Double x:Key="TabItemMinHeight">28</x:Double> |
|||
<Thickness x:Key="TabItemHeaderMargin">6, 0</Thickness> |
|||
<Thickness x:Key="ButtonPadding">6,4</Thickness> |
|||
</ResourceDictionary> |
|||
|
|||
@ -0,0 +1,140 @@ |
|||
using System.Collections.Generic; |
|||
using Avalonia.OpenGL; |
|||
using Avalonia.Platform; |
|||
|
|||
namespace Avalonia; |
|||
|
|||
/// <summary>
|
|||
/// Represents the rendering mode for platform graphics.
|
|||
/// </summary>
|
|||
public enum Win32RenderingMode |
|||
{ |
|||
/// <summary>
|
|||
/// Avalonia is rendered into a framebuffer.
|
|||
/// </summary>
|
|||
Software = 1, |
|||
|
|||
/// <summary>
|
|||
/// Enables ANGLE EGL for Windows with GPU rendering.
|
|||
/// </summary>
|
|||
AngleEgl = 2, |
|||
|
|||
/// <summary>
|
|||
/// Avalonia would try to use native Widows OpenGL with GPU rendering.
|
|||
/// </summary>
|
|||
Wgl = 3 |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// Represents the Win32 window composition mode.
|
|||
/// </summary>
|
|||
public enum Win32CompositionMode |
|||
{ |
|||
/// <summary>
|
|||
/// Render Avalonia to a texture inside the Windows.UI.Composition tree.
|
|||
/// </summary>
|
|||
/// <remarks>
|
|||
/// Supported on Windows 10 build 17134 and above. Ignored on other versions.
|
|||
/// This is recommended option, as it allows window acrylic effects and high refresh rate rendering.<br/>
|
|||
/// Can only be applied with <see cref="Win32PlatformOptions.RenderingMode"/>=<see cref="Win32RenderingMode.AngleEgl"/>.
|
|||
/// </remarks>
|
|||
WinUIComposition = 1, |
|||
|
|||
// /// <summary>
|
|||
// /// Render Avalonia to a texture inside the DirectComposition tree.
|
|||
// /// </summary>
|
|||
// /// <remarks>
|
|||
// /// Supported on Windows 8 and above. Ignored on other versions.<br/>
|
|||
// /// Can only be applied with <see cref="Win32PlatformOptions.RenderingMode"/>=<see cref="Win32RenderingMode.AngleEgl"/>.
|
|||
// /// </remarks>
|
|||
// DirectComposition = 2,
|
|||
|
|||
/// <summary>
|
|||
/// When <see cref="LowLatencyDxgiSwapChain"/> is active, renders Avalonia through a low-latency Dxgi Swapchain.
|
|||
/// </summary>
|
|||
/// <remarks>
|
|||
/// Requires Feature Level 11_3 to be active, Windows 8.1+ Any Subversion.
|
|||
/// This is only recommended if low input latency is desirable, and there is no need for the transparency
|
|||
/// and styling / blurring offered by <see cref="WinUIComposition"/>.<br/>
|
|||
/// Can only be applied with <see cref="Win32PlatformOptions.RenderingMode"/>=<see cref="Win32RenderingMode.AngleEgl"/>.
|
|||
/// </remarks>
|
|||
LowLatencyDxgiSwapChain = 3, |
|||
|
|||
/// <summary>
|
|||
/// The window renders to a redirection surface.
|
|||
/// </summary>
|
|||
/// <remarks>
|
|||
/// This option is kept only for compatibility with older systems. Some Avalonia features might not work.
|
|||
/// </remarks>
|
|||
RedirectionSurface, |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// Platform-specific options which apply to Windows.
|
|||
/// </summary>
|
|||
public class Win32PlatformOptions |
|||
{ |
|||
/// <summary>
|
|||
/// Embeds popups to the window when set to true. The default value is false.
|
|||
/// </summary>
|
|||
public bool OverlayPopups { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// Gets or sets Avalonia rendering modes with fallbacks.
|
|||
/// The first element in the array has the highest priority.
|
|||
/// The default value is: <see cref="Win32RenderingMode.AngleEgl"/>, <see cref="Win32RenderingMode.Software"/>.
|
|||
/// </summary>
|
|||
/// <remarks>
|
|||
/// If application should work on as wide range of devices as possible, at least add <see cref="Win32RenderingMode.Software"/> as a fallback value.
|
|||
/// </remarks>
|
|||
/// <exception cref="System.InvalidOperationException">Thrown if no values were matched.</exception>
|
|||
public IReadOnlyList<Win32RenderingMode> RenderingMode { get; set; } = new[] |
|||
{ |
|||
Win32RenderingMode.AngleEgl, Win32RenderingMode.Software |
|||
}; |
|||
|
|||
/// <summary>
|
|||
/// Gets or sets Avalonia composition modes with fallbacks.
|
|||
/// The first element in the array has the highest priority.
|
|||
/// The default value is: <see cref="Win32CompositionMode.WinUIComposition"/>, <see cref="Win32CompositionMode.RedirectionSurface"/>.
|
|||
/// </summary>
|
|||
/// <remarks>
|
|||
/// If application should work on as wide range of devices as possible, at least add <see cref="Win32CompositionMode.RedirectionSurface"/> as a fallback value.
|
|||
/// </remarks>
|
|||
/// <exception cref="System.InvalidOperationException">Thrown if no values were matched.</exception>
|
|||
public IReadOnlyList<Win32CompositionMode> CompositionMode { get; set; } = new[] |
|||
{ |
|||
Win32CompositionMode.WinUIComposition, Win32CompositionMode.RedirectionSurface |
|||
}; |
|||
|
|||
/// <summary>
|
|||
/// When <see cref="CompositionMode"/> is set to <see cref="Win32CompositionMode.WinUIComposition"/>, create rounded corner blur brushes
|
|||
/// If set to null the brushes will be created using default settings (sharp corners)
|
|||
/// This can be useful when you need a rounded-corner blurred Windows 10 app, or borderless Windows 11 app.
|
|||
/// </summary>
|
|||
public float? WinUICompositionBackdropCornerRadius { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// Render directly on the UI thread instead of using a dedicated render thread.
|
|||
/// Only applicable if <see cref="CompositionMode"/> is set to <see cref="Win32CompositionMode.RedirectionSurface"/>.
|
|||
/// This setting is only recommended for interop with systems that must render on the UI thread, such as WPF.
|
|||
/// This setting is false by default.
|
|||
/// </summary>
|
|||
public bool ShouldRenderOnUIThread { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// Windows OpenGL profiles used when <see cref="RenderingMode"/> is set to <see cref="Win32RenderingMode.Wgl"/>.
|
|||
/// This setting is 4.0 and 3.2 by default.
|
|||
/// </summary>
|
|||
public IList<GlVersion> WglProfiles { get; set; } = new List<GlVersion> |
|||
{ |
|||
new(GlProfileType.OpenGL, 4, 0), new(GlProfileType.OpenGL, 3, 2) |
|||
}; |
|||
|
|||
/// <summary>
|
|||
/// Provides a way to use a custom-implemented graphics context such as a custom ISkiaGpu.
|
|||
/// When this property set <see cref="RenderingMode"/> is ignored
|
|||
/// and <see cref="CompositionMode"/> only accepts null or <see cref="Win32CompositionMode.RedirectionSurface"/>.
|
|||
/// </summary>
|
|||
public IPlatformGraphics? CustomPlatformGraphics { get; set; } |
|||
} |
|||
Loading…
Reference in new issue