From 4ec5fabdd1c1b70fd8a3f5671c056bba3d38e174 Mon Sep 17 00:00:00 2001 From: dan Date: Thu, 5 Oct 2023 23:52:04 +0100 Subject: Fix animations and gestures getting reset on state updates in the lightbox (#1618) * Fix translation resetting on state update * Copy getImageStyles into iOS and Android forks * Fix opacity resetting on state update --- .../components/ImageItem/ImageItem.android.tsx | 25 +++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) (limited to 'src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.android.tsx') diff --git a/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.android.tsx b/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.android.tsx index 927657baf..6276a1a14 100644 --- a/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.android.tsx +++ b/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.android.tsx @@ -22,7 +22,7 @@ import {Image} from 'expo-image' import useImageDimensions from '../../hooks/useImageDimensions' import usePanResponder from '../../hooks/usePanResponder' -import {getImageStyles, getImageTransform} from '../../utils' +import {getImageTransform} from '../../utils' import {ImageSource} from '../../@types' import {ImageLoading} from './ImageLoading' @@ -133,4 +133,27 @@ const styles = StyleSheet.create({ }, }) +const getImageStyles = ( + image: {width: number; height: number} | null, + translate: Animated.ValueXY, + scale?: Animated.Value, +) => { + if (!image?.width || !image?.height) { + return {width: 0, height: 0} + } + + const transform = translate.getTranslateTransform() + + if (scale) { + // @ts-ignore TODO - is scale incorrect? might need to remove -prf + transform.push({scale}, {perspective: new Animated.Value(1000)}) + } + + return { + width: image.width, + height: image.height, + transform, + } +} + export default React.memo(ImageItem) -- cgit 1.4.1