mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Make perspective transformation look exactly same on iOS and Android (#18302)
Summary: There is a variation in iOS and Android output while performing perspective transformation. The variation exists even when used in Android devices with different screen density. Pull Request resolved: https://github.com/facebook/react-native/pull/18302 Differential Revision: D13877483 Pulled By: cpojer fbshipit-source-id: e48be047a8047c7562722923a67666cb098243d8
This commit is contained in:
committed by
Facebook Github Bot
parent
7bb7f0159d
commit
4c10f9321c
@@ -44,7 +44,7 @@ public abstract class BaseViewManager<T extends View, C extends LayoutShadowNode
|
||||
private static final String PROP_TRANSLATE_Y = "translateY";
|
||||
|
||||
private static final int PERSPECTIVE_ARRAY_INVERTED_CAMERA_DISTANCE_INDEX = 2;
|
||||
private static final float CAMERA_DISTANCE_NORMALIZATION_MULTIPLIER = 5;
|
||||
private static final float CAMERA_DISTANCE_NORMALIZATION_MULTIPLIER = (float)Math.sqrt(5);
|
||||
|
||||
/**
|
||||
* Used to locate views in end-to-end (UI) tests.
|
||||
@@ -234,8 +234,12 @@ public abstract class BaseViewManager<T extends View, C extends LayoutShadowNode
|
||||
float scale = DisplayMetricsHolder.getScreenDisplayMetrics().density;
|
||||
|
||||
// The following converts the matrix's perspective to a camera distance
|
||||
// such that the camera perspective looks the same on Android and iOS
|
||||
float normalizedCameraDistance = scale * cameraDistance * CAMERA_DISTANCE_NORMALIZATION_MULTIPLIER;
|
||||
// such that the camera perspective looks the same on Android and iOS.
|
||||
// The native Android implementation removed the screen density from the
|
||||
// calculation, so squaring and a normalization value of
|
||||
// sqrt(5) produces an exact replica with iOS.
|
||||
// For more information, see https://github.com/facebook/react-native/pull/18302
|
||||
float normalizedCameraDistance = scale * scale * cameraDistance * CAMERA_DISTANCE_NORMALIZATION_MULTIPLIER;
|
||||
view.setCameraDistance(normalizedCameraDistance);
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user