[android] Only render once per frame when animating several svg nodes.

This commit is contained in:
Mikael Sand
2018-09-15 19:03:28 +03:00
parent 7e42a99cf3
commit c39b3267f1
5 changed files with 10 additions and 16 deletions
@@ -11,10 +11,6 @@ public class RenderableView<T extends VirtualNode> extends ViewGroup {
super(reactContext);
}
T getShadowNode() {
return shadowNode;
}
@Override
public void setId(int id) {
super.setId(id);
@@ -9,7 +9,6 @@
package com.horcrux.svg;
import android.graphics.Bitmap;
import android.util.SparseArray;
import com.facebook.react.bridge.Dynamic;
@@ -781,8 +780,7 @@ class RenderableViewManager<T extends VirtualNode> extends ViewGroupManager<Rend
if (root == null) {
return;
}
Bitmap output = view.drawOutput();
root.setBitmap(output);
root.invalidate();
}
@Override
@@ -84,20 +84,22 @@ public class SvgView extends ViewGroup {
SvgViewManager.dropSvgView(this);
}
public void setBitmap(Bitmap bitmap) {
@Override
public void invalidate() {
super.invalidate();
if (mBitmap != null) {
mBitmap.recycle();
}
mBitmap = bitmap;
invalidate();
mBitmap = null;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (mBitmap != null) {
canvas.drawBitmap(mBitmap, 0, 0, null);
if (mBitmap == null) {
mBitmap = getShadowNode().drawOutput();
}
canvas.drawBitmap(mBitmap, 0, 0, null);
}
private SvgViewShadowNode getShadowNode() {
@@ -9,7 +9,6 @@
package com.horcrux.svg;
import android.graphics.Bitmap;
import android.util.SparseArray;
import com.facebook.react.uimanager.ThemedReactContext;
@@ -90,7 +89,7 @@ class SvgViewManager extends ViewGroupManager<SvgView> {
@Override
public void updateExtraData(SvgView root, Object extraData) {
root.setBitmap((Bitmap) extraData);
root.invalidate();
}
}
@@ -55,7 +55,6 @@ public class SvgViewShadowNode extends LayoutShadowNode {
private boolean mInvertible = true;
private boolean mRendered = false;
public SvgViewShadowNode() {
mScale = DisplayMetricsHolder.getScreenDisplayMetrics().density;
}
@@ -144,7 +143,7 @@ public class SvgViewShadowNode extends LayoutShadowNode {
@Override
public void onCollectExtraUpdates(UIViewOperationQueue uiUpdater) {
super.onCollectExtraUpdates(uiUpdater);
uiUpdater.enqueueUpdateExtraData(getReactTag(), drawOutput());
uiUpdater.enqueueUpdateExtraData(getReactTag(), null);
}
@Override