summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Platform.Android/VisualElementTracker.cs
diff options
context:
space:
mode:
authorRui Marinho <me@ruimarinho.net>2017-04-06 14:19:52 +0100
committerGitHub <noreply@github.com>2017-04-06 14:19:52 +0100
commit425fafb05723a299a5eaa0f6d801f87bdf7141fa (patch)
treea9e38aa0a0252e6a6d2da6990303d82f2163a5a9 /Xamarin.Forms.Platform.Android/VisualElementTracker.cs
parent829a4bda76166ddffce5a0e84538183b9527a1bd (diff)
downloadxamarin-forms-425fafb05723a299a5eaa0f6d801f87bdf7141fa.tar.gz
xamarin-forms-425fafb05723a299a5eaa0f6d801f87bdf7141fa.tar.bz2
xamarin-forms-425fafb05723a299a5eaa0f6d801f87bdf7141fa.zip
Android fastrenderers (#845)
* Obsolete IVisualElementRenderer.ViewGroup in favor of .View * Fix NRE * Changing TContainer in PlatformEffect to View * Fix "View" type * new VisualElementRenderer * First attempt at a fast(er) button renderer * Fast Label Renderer * Let's try that again. Behold: Label Fast Renderer * Move FrameRenderer into Fast Renderers * Fix Disposable on VisualElementRenderer * Simplify touch and click handlers * Drop empty if clause * [Android] Add initial Image fast renderer * Split accessibility out to a separate helper class; fix tapgesture bug with label * [Android] Small fixes to VisualElementRenderer * Move accessiblity stuff to a separate class (which needs a good name) * Prevent query from looking to parent for fast renderers * [Android] ImageRenderer refactoring * Fix elevation/z-index bugs with Button (e.g., 40173) * Move SetLabeledBy to Accessibilitizer * Un-break automation IDs for Labels * Move gesture handling to its own class * Split gesture and effect management into separate classes * Remove unneeded packager from LabelRenderer * LabelRenderer inherits from FormsTextView * Batch updates to View * Fix isOnParentRenderer check for non-Android platforms * [Controls] Update Xamarin.Forms.ControlGallery.iOS.csproj * [Android,IOS] Small fixes to rebase and use of Internals * [Android] Ignroe warning for now * Fast renderers now passing InputTransparent and IsEnabled tests * Fast and legacy renderers now pass the Enabled and InputTransparent tests * Change PlatformEffect back, default container to null * Fix mangled using directives
Diffstat (limited to 'Xamarin.Forms.Platform.Android/VisualElementTracker.cs')
-rw-r--r--Xamarin.Forms.Platform.Android/VisualElementTracker.cs68
1 files changed, 32 insertions, 36 deletions
diff --git a/Xamarin.Forms.Platform.Android/VisualElementTracker.cs b/Xamarin.Forms.Platform.Android/VisualElementTracker.cs
index 77404da8..b02fa0c4 100644
--- a/Xamarin.Forms.Platform.Android/VisualElementTracker.cs
+++ b/Xamarin.Forms.Platform.Android/VisualElementTracker.cs
@@ -33,15 +33,15 @@ namespace Xamarin.Forms.Platform.Android
_propertyChangedHandler = HandlePropertyChanged;
_renderer = renderer;
- _context = renderer.ViewGroup.Context;
+ _context = renderer.View.Context;
_renderer.ElementChanged += RendererOnElementChanged;
VisualElement view = renderer.Element;
SetElement(null, view);
- renderer.ViewGroup.SetCameraDistance(3600);
+ renderer.View.SetCameraDistance(3600);
- renderer.ViewGroup.AddOnAttachStateChangeListener(AttachTracker.Instance);
+ renderer.View.AddOnAttachStateChangeListener(AttachTracker.Instance);
}
public void Dispose()
@@ -64,7 +64,7 @@ namespace Xamarin.Forms.Platform.Android
if (_renderer != null)
{
_renderer.ElementChanged -= RendererOnElementChanged;
- _renderer.ViewGroup.RemoveOnAttachStateChangeListener(AttachTracker.Instance);
+ _renderer.View.RemoveOnAttachStateChangeListener(AttachTracker.Instance);
_renderer = null;
_context = null;
}
@@ -76,7 +76,7 @@ namespace Xamarin.Forms.Platform.Android
Performance.Start();
VisualElement view = _renderer.Element;
- AView aview = _renderer.ViewGroup;
+ AView aview = _renderer.View;
var x = (int)_context.ToPixels(view.X);
var y = (int)_context.ToPixels(view.Y);
@@ -110,6 +110,11 @@ namespace Xamarin.Forms.Platform.Android
void HandlePropertyChanged(object sender, PropertyChangedEventArgs e)
{
+ if (_renderer == null)
+ {
+ return;
+ }
+
if (e.PropertyName == Layout.IsClippedToBoundsProperty.PropertyName)
{
UpdateClipToBounds();
@@ -183,10 +188,10 @@ namespace Xamarin.Forms.Platform.Android
{
var isInLayout = false;
if ((int)Build.VERSION.SdkInt >= 18)
- isInLayout = _renderer.ViewGroup.IsInLayout;
+ isInLayout = _renderer.View.IsInLayout;
- if (!isInLayout && !_renderer.ViewGroup.IsLayoutRequested)
- _renderer.ViewGroup.RequestLayout();
+ if (!isInLayout && !_renderer.View.IsLayoutRequested)
+ _renderer.View.RequestLayout();
}
void RendererOnElementChanged(object sender, VisualElementChangedEventArgs args)
@@ -208,11 +213,11 @@ namespace Xamarin.Forms.Platform.Android
{
newElement.BatchCommitted += _batchCommittedHandler;
newElement.PropertyChanged += _propertyChangedHandler;
- _context = _renderer.ViewGroup.Context;
+ _context = _renderer.View.Context;
if (oldElement != null)
{
- AView view = _renderer.ViewGroup;
+ AView view = _renderer.View;
// ReSharper disable CompareOfFloatsByEqualityOperator
if (oldElement.AnchorX != newElement.AnchorX)
@@ -243,7 +248,7 @@ namespace Xamarin.Forms.Platform.Android
void UpdateAnchorX()
{
VisualElement view = _renderer.Element;
- AView aview = _renderer.ViewGroup;
+ AView aview = _renderer.View;
float currentPivot = aview.PivotX;
var target = (float)(view.AnchorX * _context.ToPixels(view.Width));
@@ -254,7 +259,7 @@ namespace Xamarin.Forms.Platform.Android
void UpdateAnchorY()
{
VisualElement view = _renderer.Element;
- AView aview = _renderer.ViewGroup;
+ AView aview = _renderer.View;
float currentPivot = aview.PivotY;
var target = (float)(view.AnchorY * _context.ToPixels(view.Height));
@@ -265,7 +270,7 @@ namespace Xamarin.Forms.Platform.Android
void UpdateClipToBounds()
{
var layout = _renderer.Element as Layout;
- var parent = _renderer.ViewGroup.Parent as ViewGroup;
+ var parent = _renderer.View.Parent as ViewGroup;
if (parent == null || layout == null)
return;
@@ -282,7 +287,7 @@ namespace Xamarin.Forms.Platform.Android
void UpdateIsVisible()
{
VisualElement view = _renderer.Element;
- AView aview = _renderer.ViewGroup;
+ AView aview = _renderer.View;
if (view.IsVisible && aview.Visibility != ViewStates.Visible)
aview.Visibility = ViewStates.Visible;
@@ -295,7 +300,7 @@ namespace Xamarin.Forms.Platform.Android
Performance.Start();
VisualElement view = _renderer.Element;
- AView aview = _renderer.ViewGroup;
+ AView aview = _renderer.View;
if (aview is FormsViewGroup)
{
@@ -306,20 +311,11 @@ namespace Xamarin.Forms.Platform.Android
}
else
{
- UpdateAnchorX();
- UpdateAnchorY();
- UpdateIsVisible();
-
- if (view.IsEnabled != aview.Enabled)
- aview.Enabled = view.IsEnabled;
-
- UpdateOpacity();
- UpdateRotation();
- UpdateRotationX();
- UpdateRotationY();
- UpdateScale();
- UpdateTranslationX();
- UpdateTranslationY();
+ FormsViewGroup.SendViewBatchUpdate(aview, (float)(view.AnchorX * _context.ToPixels(view.Width)),
+ (float)(view.AnchorY * _context.ToPixels(view.Height)),
+ (int)(view.IsVisible ? ViewStates.Visible : ViewStates.Invisible), view.IsEnabled, (float)view.Opacity,
+ (float)view.Rotation, (float)view.RotationX, (float)view.RotationY, (float)view.Scale,
+ _context.ToPixels(view.TranslationX), _context.ToPixels(view.TranslationY));
}
Performance.Stop();
@@ -330,7 +326,7 @@ namespace Xamarin.Forms.Platform.Android
Performance.Start();
VisualElement view = _renderer.Element;
- AView aview = _renderer.ViewGroup;
+ AView aview = _renderer.View;
aview.Alpha = (float)view.Opacity;
@@ -340,7 +336,7 @@ namespace Xamarin.Forms.Platform.Android
void UpdateRotation()
{
VisualElement view = _renderer.Element;
- AView aview = _renderer.ViewGroup;
+ AView aview = _renderer.View;
aview.Rotation = (float)view.Rotation;
}
@@ -348,7 +344,7 @@ namespace Xamarin.Forms.Platform.Android
void UpdateRotationX()
{
VisualElement view = _renderer.Element;
- AView aview = _renderer.ViewGroup;
+ AView aview = _renderer.View;
aview.RotationX = (float)view.RotationX;
}
@@ -356,7 +352,7 @@ namespace Xamarin.Forms.Platform.Android
void UpdateRotationY()
{
VisualElement view = _renderer.Element;
- AView aview = _renderer.ViewGroup;
+ AView aview = _renderer.View;
aview.RotationY = (float)view.RotationY;
}
@@ -364,7 +360,7 @@ namespace Xamarin.Forms.Platform.Android
void UpdateScale()
{
VisualElement view = _renderer.Element;
- AView aview = _renderer.ViewGroup;
+ AView aview = _renderer.View;
aview.ScaleX = (float)view.Scale;
aview.ScaleY = (float)view.Scale;
@@ -373,7 +369,7 @@ namespace Xamarin.Forms.Platform.Android
void UpdateTranslationX()
{
VisualElement view = _renderer.Element;
- AView aview = _renderer.ViewGroup;
+ AView aview = _renderer.View;
aview.TranslationX = _context.ToPixels(view.TranslationX);
}
@@ -381,7 +377,7 @@ namespace Xamarin.Forms.Platform.Android
void UpdateTranslationY()
{
VisualElement view = _renderer.Element;
- AView aview = _renderer.ViewGroup;
+ AView aview = _renderer.View;
aview.TranslationY = _context.ToPixels(view.TranslationY);
}