Fix ViewShot dropping frames and stickers on Android by grouping all layers into a single composited parent View

This commit is contained in:
2026-06-01 10:08:55 +02:00
parent ba8248fcc2
commit e069fef170
2 changed files with 25 additions and 22 deletions
+1
View File
@@ -19,6 +19,7 @@ export default function FrameOverlay({ frameAsset }: FrameOverlayProps) {
source={frameAsset} source={frameAsset}
style={styles.frameImage} style={styles.frameImage}
resizeMode="cover" resizeMode="cover"
fadeDuration={0}
/> />
</View> </View>
); );
+24 -22
View File
@@ -445,31 +445,33 @@ export default function PreviewScreen({
style={styles.viewShotContainer} style={styles.viewShotContainer}
collapsable={false} collapsable={false}
> >
{renderCollageView()} <View style={StyleSheet.absoluteFill} collapsable={false}>
{renderCollageView()}
{/* Frame Overlay */} {/* Frame Overlay */}
{activeFrame && <FrameOverlay frameAsset={activeFrame.asset} />} {activeFrame && <FrameOverlay frameAsset={activeFrame.asset} />}
{/* Date/Time Overlay */} {/* Date/Time Overlay */}
{dateOverlay !== 'off' && ( {dateOverlay !== 'off' && (
<View style={[styles.dateOverlay, getDatePositionStyle()]} pointerEvents="none"> <View style={[styles.dateOverlay, getDatePositionStyle()]} pointerEvents="none">
<Text style={styles.dateOverlayText}> <Text style={styles.dateOverlayText}>
{formatDate(dateOverlay)} {formatDate(dateOverlay)}
</Text> </Text>
</View> </View>
)} )}
{/* Stickers */} {/* Stickers */}
{stickers.map((sticker) => ( {stickers.map((sticker) => (
<DraggableSticker <DraggableSticker
key={sticker.id} key={sticker.id}
sticker={sticker} sticker={sticker}
isSelected={selectedStickerId === sticker.id} isSelected={selectedStickerId === sticker.id}
onSelect={handleStickerSelect} onSelect={handleStickerSelect}
onDelete={handleStickerDelete} onDelete={handleStickerDelete}
onUpdate={handleStickerUpdate} onUpdate={handleStickerUpdate}
/> />
))} ))}
</View>
</ViewShot> </ViewShot>
{/* Sticker Tray (outside ViewShot — not captured) */} {/* Sticker Tray (outside ViewShot — not captured) */}