Let LayoutAnimation respect style opacity on Android. Fix issue #11769

Summary:
Fix issue #11769

When a view or text is created with style opacity (e.g. 0.2) and LayoutAnimation is enabled on Android, what we expected to happen is the view or text has opacity (e.g. 0.2).
What actually happens is the view or text's opacity is always 1.

In the following screenshot of the sample app, the odd numbered view/text's opacity should be 0.2. If we create them without LayoutAnimation, everything is good. But when we do with LayoutAnimation, the style opacity is not respected.
![Screenshot](https://github.com/vinceyuan/ReactNativeOpacityBugDemo/raw/master/ReactNativeOpacityBug.gif)

Reproduced on rnplay.org https://rnplay.org/apps/JbdOpQ
The sample project I created: https://github.com/vinceyuan/ReactNativeOpacityBugDemo
You can try my fix on branch fix-react-native-issue-11769 https://github.com/vinceyuan/ReactNativeOpacityBugDemo/tree/fix-react-native-issue-11769
Closes https://github.com/facebook/react-native/pull/11770

Differential Revision: D4403096

fbshipit-source-id: 99c6831ab17eae304e09f23dbad387041d933a30
This commit is contained in:
Vince Yuan
2017-01-12 09:09:06 -08:00
committed by Facebook Github Bot
parent 4844225eed
commit 4c08105e14

View File

@@ -22,13 +22,16 @@ import com.facebook.react.uimanager.IllegalViewOperationException;
@Override
Animation createAnimationImpl(View view, int x, int y, int width, int height) {
float fromValue = isReverse() ? 1.0f : 0.0f;
float toValue = isReverse() ? 0.0f : 1.0f;
if (mAnimatedProperty != null) {
switch (mAnimatedProperty) {
case OPACITY:
case OPACITY: {
float fromValue = isReverse() ? view.getAlpha() : 0.0f;
float toValue = isReverse() ? 0.0f : view.getAlpha();
return new OpacityAnimation(view, fromValue, toValue);
case SCALE_XY:
}
case SCALE_XY: {
float fromValue = isReverse() ? 1.0f : 0.0f;
float toValue = isReverse() ? 0.0f : 1.0f;
return new ScaleAnimation(
fromValue,
toValue,
@@ -38,6 +41,7 @@ import com.facebook.react.uimanager.IllegalViewOperationException;
.5f,
Animation.RELATIVE_TO_SELF,
.5f);
}
default:
throw new IllegalViewOperationException(
"Missing animation for property : " + mAnimatedProperty);