masked-view
masked-view copied to clipboard
Image as a mask for another image not rendering on Android
Bug report
Summary
Trying to apply some image shape masking using .png image. Everything works as expected on iOS, but android doesn't render anything, just empty. If i try to replace image mask with text, android works as expected, problem exist if use image as a mask element.
Image used for masking:

And result:

Environment info
react-native info output:
System:
OS: macOS 10.15.5
CPU: (4) x64 Intel(R) Core(TM) i5-7360U CPU @ 2.30GHz
Memory: 112.46 MB / 8.00 GB
Shell: 5.7.1 - /bin/zsh
Binaries:
Node: 13.7.0 - /usr/local/bin/node
Yarn: 1.21.1 - /usr/local/bin/yarn
npm: 6.14.7 - /usr/local/bin/npm
Watchman: 4.9.0 - /usr/local/bin/watchman
Managers:
CocoaPods: 1.9.3 - /usr/local/bin/pod
SDKs:
iOS SDK:
Platforms: iOS 13.2, DriverKit 19.0, macOS 10.15, tvOS 13.2, watchOS 6.1
Android SDK:
API Levels: 29
Build Tools: 27.0.3, 28.0.3, 29.0.2, 29.0.3
System Images: android-29 | Intel x86 Atom_64, android-29 | Google Play Intel x86 Atom
Android NDK: Not Found
IDEs:
Android Studio: 4.0 AI-193.6911.18.40.6626763
Xcode: 11.3/11C29 - /usr/bin/xcodebuild
Languages:
Java: 1.8.0_201 - /usr/bin/javac
Python: 2.7.16 - /usr/bin/python
npmPackages:
@react-native-community/cli: Not Found
react: 16.13.1 => 16.13.1
react-native: 0.63.2 => 0.63.2
npmGlobalPackages:
*react-native*: Not Found
Library version: ^0.1.10
Reproducible sample code

api 29?
Yes
Yup me too , i dont know why exactly is this 😐
@Only-IceSoul can you give me how to set it up ?
pixel 2 api 29

<StatusBar barStyle="dark-content" />
<SafeAreaView style={{flex: 1, justifyContent:'center',alignItems:'center'}} >
<MaskedView
maskElement={
<Image style={{width:300,height:300} }source={ require('./shape.png')} />
}
>
<Image style={{ width:300,height:300,backgroundColor:'green'} } source={ require('./picture.jpg')} />
</MaskedView>
</SafeAreaView>
for me it's work with resizeMode='cover' and 'repeat' and doesn't work with other resizeMode ...
for me it's work with resizeMode='cover' and 'repeat' and doesn't work with other resizeMode ...
This actually fixed the issue for us of having the image not display at all. Now it does display on Android, but it is incredibly slow to load, sometimes taking up to 10 seconds. This is with API 29.
any update on this?
We had a similar issue on our project, and managed to get it to work by setting a color to the image/shape within maskElement (previously it was transparent since we didn't think the color matters to a mask)
We had a similar issue on our project, and managed to get it to work by setting a color to the image/shape within maskElement (previously it was transparent since we didn't think the color matters to a mask)
You mean apply a style props like backgroundColor or edit the transparent background of the image? Is it work as .png images? I have apply backgroundColor within image in maskElement but it's just showing rectangle mask not the one I expect
We are using a SVG for the mask, so there's a color prop that we can specify which ended up affecting the fill color.
We are using a SVG for the mask, so there's a
colorprop that we can specify which ended up affecting the fill color.
So basically it's not Image component or SVG Images Component but more like SVG component like path, rectangle, etc. Okay.