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 ff88ff0db6..4823e722ef 100644 --- a/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.android.tsx +++ b/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.android.tsx @@ -20,8 +20,6 @@ import Animated, { } from 'react-native-reanimated' import {Image, ImageStyle} from 'expo-image' -const AnimatedImage = Animated.createAnimatedComponent(Image) - import {useImageDimensions} from '#/lib/media/image-sizes' import type {Dimensions as ImageDimensions, ImageSource} from '../../@types' import { @@ -308,10 +306,10 @@ const ImageItem = ({ style={[styles.container, animatedContainerStyle, {}]}> - - thumbAspect) { + uncroppedInitialWidth = thumbnailDims.height * imageAspect + uncroppedInitialHeight = thumbnailDims.height + } else { + uncroppedInitialWidth = thumbnailDims.width + uncroppedInitialHeight = thumbnailDims.width / imageAspect + } + const finalWidth = screenSize.width + const finalHeight = screenSize.width / imageAspect + const initialScale = Math.min( + uncroppedInitialWidth / finalWidth, + uncroppedInitialHeight / finalHeight, + ) + + const croppedFinalWidth = thumbnailDims.width / initialScale + const croppedFinalHeight = thumbnailDims.height / initialScale const screenCenterX = screenSize.width / 2 const screenCenterY = screenSize.height / 2 const thumbnailCenterX = thumbnailDims.pageX + thumbnailDims.width / 2 const thumbnailCenterY = thumbnailDims.pageY + thumbnailDims.height / 2 - const initialTranslateX = thumbnailCenterX - screenCenterX + const initialTranslateX = + thumbnailCenterX + (finalWidth - croppedFinalWidth) / 2 - screenCenterX const initialTranslateY = thumbnailCenterY - screenCenterY - const imageAspect = imageDims.width / imageDims.height - const thumbAspect = thumbnailDims.width / thumbnailDims.height - const initialWidth = - imageAspect > thumbAspect - ? thumbnailDims.height * imageAspect - : thumbnailDims.width - const initialHeight = - imageAspect > thumbAspect - ? thumbnailDims.height - : thumbnailDims.width / imageAspect - const finalWidth = screenSize.width - const finalHeight = screenSize.width / imageAspect - const initialScale = Math.min( - initialWidth / finalWidth, - initialHeight / finalHeight, - ) - - const translateX = interpolate(progress, [0, 1], [initialTranslateX, 0]) - const translateY = interpolate(progress, [0, 1], [initialTranslateY, 0]) const scale = interpolate(progress, [0, 1], [initialScale, 1]) + const translateX = interpolatePx(progress, [0, 1], [initialTranslateX, 0]) + const translateY = interpolatePx(progress, [0, 1], [initialTranslateY, 0]) + const width = interpolatePx(progress, [0, 1], [croppedFinalWidth, finalWidth]) + const height = interpolatePx( + progress, + [0, 1], + [croppedFinalHeight, finalHeight], + ) return { transform: [{translateX}, {translateY}, {scale}], - width: finalWidth, - height: finalHeight, + width, + height, } } @@ -507,7 +528,7 @@ function ImageViewingRoot({ function withClampedSpring(value: any) { 'worklet' - return withSpring(value, {overshootClamping: true, stiffness: 150}) + return withSpring(value, {overshootClamping: true, stiffness: 120}) } export default ImageViewingRoot