diff options
Diffstat (limited to 'Xamarin.Forms.Platform.Android/Renderers/PageRenderer.cs')
-rw-r--r-- | Xamarin.Forms.Platform.Android/Renderers/PageRenderer.cs | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/Xamarin.Forms.Platform.Android/Renderers/PageRenderer.cs b/Xamarin.Forms.Platform.Android/Renderers/PageRenderer.cs new file mode 100644 index 00000000..24d85aa8 --- /dev/null +++ b/Xamarin.Forms.Platform.Android/Renderers/PageRenderer.cs @@ -0,0 +1,71 @@ +using System.ComponentModel; +using Android.Views; + +namespace Xamarin.Forms.Platform.Android +{ + public class PageRenderer : VisualElementRenderer<Page> + { + public override bool OnTouchEvent(MotionEvent e) + { + base.OnTouchEvent(e); + + return true; + } + + protected override void Dispose(bool disposing) + { + Element?.SendDisappearing(); + base.Dispose(disposing); + } + + protected override void OnAttachedToWindow() + { + base.OnAttachedToWindow(); + var pageContainer = Parent as PageContainer; + if (pageContainer != null && pageContainer.IsInFragment) + return; + Element.SendAppearing(); + } + + protected override void OnDetachedFromWindow() + { + base.OnDetachedFromWindow(); + var pageContainer = Parent as PageContainer; + if (pageContainer != null && pageContainer.IsInFragment) + return; + Element.SendDisappearing(); + } + + protected override void OnElementChanged(ElementChangedEventArgs<Page> e) + { + Page view = e.NewElement; + base.OnElementChanged(e); + + UpdateBackgroundColor(view); + UpdateBackgroundImage(view); + + Clickable = true; + } + + protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) + { + base.OnElementPropertyChanged(sender, e); + if (e.PropertyName == Page.BackgroundImageProperty.PropertyName) + UpdateBackgroundImage(Element); + if (e.PropertyName == VisualElement.BackgroundColorProperty.PropertyName) + UpdateBackgroundColor(Element); + } + + void UpdateBackgroundColor(Page view) + { + if (view.BackgroundColor != Color.Default) + SetBackgroundColor(view.BackgroundColor.ToAndroid()); + } + + void UpdateBackgroundImage(Page view) + { + if (!string.IsNullOrEmpty(view.BackgroundImage)) + this.SetBackground(Context.Resources.GetDrawable(view.BackgroundImage)); + } + } +}
\ No newline at end of file |