Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Image - White flickering when changing screen #14

Closed
Cengkaruk opened this issue Apr 12, 2016 · 20 comments
Closed

Image - White flickering when changing screen #14

Cengkaruk opened this issue Apr 12, 2016 · 20 comments
Assignees

Comments

@Cengkaruk
Copy link

Hi,

I own some screens with Image as a full background, i have flickering moment when the navigator push another screen. I'm new with react-native (6 days), i don't recognize this issue is related to this library or react-native instead.

I realize the Image component needed some of time to load my image raw. Any advice for me? i have idea for giving the Image a fade-in animation, after they loaded. Have a better solution?

Thanks

@wgormley
Copy link

i am having this same issue but without full size images. i have a dark background and if i disable the animation i get a brief flicker of a white background.

@maxs15
Copy link

maxs15 commented May 26, 2016

Same issue here, @guyca any idea about a fix ?
I see two possible solutions:
1/ We could define a backgroundColor in the navigatorStyles ?
2/ Prerender the view before it's pushed ?

@ninjz
Copy link

ninjz commented May 26, 2016

Is this somehow related to this issue #38 i'm having?

@maxs15
Copy link

maxs15 commented May 27, 2016

Could be yes, @artald @guyca are you aware of this issue ?
It is currently the only thing preventing me from being able to use this awesome component

@guyca guyca self-assigned this May 30, 2016
@guyca
Copy link
Collaborator

guyca commented May 30, 2016

Hey guys. Are you experiencing these issues in Android or iOS?
Could one of you please provide us a sample project where this issue is recreated?

@maxs15
Copy link

maxs15 commented May 31, 2016

Hey, I finally found the issue on my side.
I was using TouchableHighlight to handle the click where I was pushing my new view and this was the cause of my animation issue !
Pretty weird.. hope it'll maybe help some people

@ghost
Copy link

ghost commented Jun 17, 2016

@maxs15 which component are you using instead for the click Event?
I mean the TouchableHighlight is used by different libraries as wrapper.

@maxs15
Copy link

maxs15 commented Jun 17, 2016

I used TouchableWithoutFeedback for the moment.
But yes this is a problem indeed, maybe the solution would be to execute the navigator on a different thread ?

@ghost
Copy link

ghost commented Jun 17, 2016

just tried with TouchableWithoutFeedback and had the same issue.. I also tried to setTimeout before pushing the new screen, same white flickering. I guess, it rerenders the whole application when you push to some screen, and it's not waiting for the componentDidMount event.. But I am not sure

@maxs15
Copy link

maxs15 commented Jun 17, 2016

Well maybe you have a different problem, but in my case it was the issue.
Interesting article about RN perfs: http://facebook.github.io/react-native/docs/performance.html
I guess the main thread is too busy to perform the work under 16.67ms causing frames drop (white flickering)

@ghost
Copy link

ghost commented Jun 18, 2016

@guyca I created a very simple project repo, which shows the bug. Please take a look when you have time https://github.com/dropfen/wix-nav-flickering-issue

@ghost
Copy link

ghost commented Jun 18, 2016

Ok, the problem is, that React styles applies after the navigation started, and by default the backgroundColor is white, so this is the flicker effect..

To fix it, I took @maxs15 1. suggestion to apply a screenBackgroundColor in navigatorStyle, which is automatically added as the view.backgroundColor before React wakes up..

This was done in react-native-controllers, here's the PR
wix-incubator/react-native-controllers#63

@ghost
Copy link

ghost commented Jun 18, 2016

So now, you can even have RED flickering, when you add

...
navigatorStyle: { screenBackgroundColor: '#f00' }
...

)))

@maxs15
Copy link

maxs15 commented Jun 18, 2016

Awesome @dropfen ! Good job

@guyca
Copy link
Collaborator

guyca commented Jun 18, 2016

@dropfen Good job! Thanks.

@guyca guyca closed this as completed Jun 18, 2016
@ghost
Copy link

ghost commented Jun 18, 2016

thanks guys :)

@reyalpsirc
Copy link

I'm having these issues of white flickering on Android for the starting screens that have an image background. How can I solve it knowing that a color is not an option since it is too much different from the background images? On iOS I solved it with screenBackgroundImageName but, Android has not support for that. Am I missing something for setting Images as backgrounds for screens??

@guyca
Copy link
Collaborator

guyca commented Nov 15, 2017

Is it a flicker or a fade animation? did you try defining fadeDurarion: 0 on the image?

@reyalpsirc
Copy link

@guyca Its a kind of a fade with white only when calling the startSingleScreenApp or startTabBasedApp functions. Anyway, it seems that I solved the problem by adding this:

app/res/values/styles.xml:

<resources>
    ...
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:colorBackgroundCacheHint">@null</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:fitsSystemWindows">true</item>
        <item name="android:windowAnimationStyle">@style/DialogNoAnimation</item>
    </style>

    <style name="DialogNoAnimation">
        <item name="android:windowEnterAnimation">@anim/no_animation</item>
        <item name="android:windowExitAnimation">@anim/no_animation</item>
    </style>
    ...
</resources>

app/res/anim/no_animation.xml:

<alpha
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromAlpha="1.0"
    android:toAlpha="1.0"
    android:duration="300" />

Please let me know if this was the correct approach or not.

@dxuartz
Copy link

dxuartz commented Mar 30, 2018

I had exactly the same issue running TouchableHighlight.
Found a pretty good solution setting up the prop underlayColor of TouchableHighlight to the same dark color of my view alongside with setting cardStyle: { backgroundColor: '#242424' } on my StackNavigator options. Working like a charm!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants