From 79da4e9d2eb93c30194ce38ac31cf10e384ffcf4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Such=C3=BD?= Date: Tue, 11 Aug 2026 21:23:48 +0200 Subject: [PATCH] fix(android): scale about the view pivot when capturing TextureView/SurfaceView content Canvas.scale was applied about the canvas origin while rotation already uses the view's pivot, so captures of scaled TextureView/SurfaceView content came out anchored at the top-left corner instead of where they appear on screen. Pass the pivot to scale, matching how Android renders view scale. Co-Authored-By: Claude Claude-Session: https://claude.ai/code/session_018o7Mf9BAF9qMStB698ab1L --- .../main/java/fr/greweb/reactnativeviewshot/ViewShot.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/android/src/main/java/fr/greweb/reactnativeviewshot/ViewShot.java b/android/src/main/java/fr/greweb/reactnativeviewshot/ViewShot.java index bd309a6a..296a4051 100644 --- a/android/src/main/java/fr/greweb/reactnativeviewshot/ViewShot.java +++ b/android/src/main/java/fr/greweb/reactnativeviewshot/ViewShot.java @@ -896,12 +896,13 @@ private Matrix applyTransformations(final Canvas c, @NonNull final View root, @N final float dy = v.getTop() + ((v != child) ? v.getPaddingTop() : 0) + v.getTranslationY(); c.translate(dx, dy); c.rotate(v.getRotation(), v.getPivotX(), v.getPivotY()); - c.scale(v.getScaleX(), v.getScaleY()); + // scale about the view's pivot, matching how android renders the view + c.scale(v.getScaleX(), v.getScaleY(), v.getPivotX(), v.getPivotY()); // compute the matrix just for any future use transform.postTranslate(dx, dy); transform.postRotate(v.getRotation(), v.getPivotX(), v.getPivotY()); - transform.postScale(v.getScaleX(), v.getScaleY()); + transform.postScale(v.getScaleX(), v.getScaleY(), v.getPivotX(), v.getPivotY()); } return transform;