From b896714ed012db1b792070e3550f47b4be44ea49 Mon Sep 17 00:00:00 2001 From: InJung Chung Date: Wed, 7 Nov 2018 09:58:06 +0900 Subject: [PATCH] [andriod] invalidate SvgView when view hierarchy changes --- .../horcrux/svg/RenderableViewManager.java | 34 ++++++++++++++++--- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/android/src/main/java/com/horcrux/svg/RenderableViewManager.java b/android/src/main/java/com/horcrux/svg/RenderableViewManager.java index 34a4ed62..b2ed53b9 100644 --- a/android/src/main/java/com/horcrux/svg/RenderableViewManager.java +++ b/android/src/main/java/com/horcrux/svg/RenderableViewManager.java @@ -11,6 +11,7 @@ package com.horcrux.svg; import android.graphics.Matrix; import android.view.View; +import android.view.ViewGroup; import com.facebook.infer.annotation.Assertions; import com.facebook.react.bridge.Dynamic; @@ -1012,6 +1013,33 @@ class RenderableViewManager extends ViewGroupManager { node.setName(name); } + private void invalidateSvgView(VirtualView node) { + SvgView view = node.getSvgView(); + if (view!= null) { + view.invalidate(); + } + } + + @Override + protected void addEventEmitters(ThemedReactContext reactContext, VirtualView view) { + super.addEventEmitters(reactContext, view); + view.setOnHierarchyChangeListener(new ViewGroup.OnHierarchyChangeListener() { + @Override + public void onChildViewAdded(View view, View view1) { + if (view instanceof VirtualView) { + invalidateSvgView((VirtualView) view); + } + } + + @Override + public void onChildViewRemoved(View view, View view1) { + if (view instanceof VirtualView) { + invalidateSvgView((VirtualView) view); + } + } + }); + } + /** * Callback that will be triggered after all properties are updated in current update transaction * (all @ReactProp handlers for properties updated in current transaction have been called). If @@ -1021,11 +1049,7 @@ class RenderableViewManager extends ViewGroupManager { @Override protected void onAfterUpdateTransaction(VirtualView node) { super.onAfterUpdateTransaction(node); - SvgView view = node.getSvgView(); - if (view == null) { - return; - } - view.invalidate(); + invalidateSvgView(node); } @Override