React Native:如何为视图设置动画,使其从垂直堆叠变为水平堆叠
React Native: how to animate Views from being stacked vertically to horizontally
所以,基本上,我有两个垂直堆叠的视图开始,按下按钮时它们需要动画,所以第一个视图向左移动,第二个视图上升并位于第一个视图的右侧.在第一个视图上调整 flex 并在第二个视图上更改顶部和左侧样式似乎很容易,在 IOS 上看起来不错,但是在 Android 上这会导致第二个视图被切断的问题当它上升时在底部(大概是因为 View 的 flex 或 height 对内容来说不够高,但不幸的是我不能改变它,因为它弄乱了下面其余内容的 flex 样式)。
关于如何解决这个问题有什么建议吗?
这可能是不可能的,但我想知道是否有办法,使用 LayoutAnimation 或动画 API,将这些视图从 flexDirection 'column' 动画化到 [=17] =]?那会非常方便。
LayoutAnimation 很棒,伙计们!只需根据需要在 'column' 和 'row' 状态更改之间切换,LayoutAnimation 会处理剩下的事情——超级简洁。这是一个简单的例子,供遇到同样问题的其他人使用,希望对您有所帮助:
export default class Test extends Component {
constructor() {
super();
this.state = {
toggleStyle: 'column',
}
if(Platform.OS === 'android'){
UIManager.setLayoutAnimationEnabledExperimental(true);
}
}
_onPress = () => {
LayoutAnimation.configureNext(CustomLayoutAnimation.position);
let direction = this.state.toggleStyle === 'row' ? 'column' : 'row'
this.setState({toggleStyle: direction})
}
render() {
return(
<View style={{flex: 1}}>
<View style={{flex: 1}} />
<View style={{flex: 1, flexDirection: this.state.toggleStyle}}>
<View style={{flex: 1, width:'100%', backgroundColor: 'blue'}} />
<View style={{flex: 1, width:'100%', backgroundColor: 'green', justifyContent: 'center', alignItems: 'center'}}><Text onPress={() => this._onPress()}>Toggle</Text></View>
</View>
<View style={{flex: 1}} />
</View>
)
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
所以,基本上,我有两个垂直堆叠的视图开始,按下按钮时它们需要动画,所以第一个视图向左移动,第二个视图上升并位于第一个视图的右侧.在第一个视图上调整 flex 并在第二个视图上更改顶部和左侧样式似乎很容易,在 IOS 上看起来不错,但是在 Android 上这会导致第二个视图被切断的问题当它上升时在底部(大概是因为 View 的 flex 或 height 对内容来说不够高,但不幸的是我不能改变它,因为它弄乱了下面其余内容的 flex 样式)。
关于如何解决这个问题有什么建议吗?
这可能是不可能的,但我想知道是否有办法,使用 LayoutAnimation 或动画 API,将这些视图从 flexDirection 'column' 动画化到 [=17] =]?那会非常方便。
LayoutAnimation 很棒,伙计们!只需根据需要在 'column' 和 'row' 状态更改之间切换,LayoutAnimation 会处理剩下的事情——超级简洁。这是一个简单的例子,供遇到同样问题的其他人使用,希望对您有所帮助:
export default class Test extends Component {
constructor() {
super();
this.state = {
toggleStyle: 'column',
}
if(Platform.OS === 'android'){
UIManager.setLayoutAnimationEnabledExperimental(true);
}
}
_onPress = () => {
LayoutAnimation.configureNext(CustomLayoutAnimation.position);
let direction = this.state.toggleStyle === 'row' ? 'column' : 'row'
this.setState({toggleStyle: direction})
}
render() {
return(
<View style={{flex: 1}}>
<View style={{flex: 1}} />
<View style={{flex: 1, flexDirection: this.state.toggleStyle}}>
<View style={{flex: 1, width:'100%', backgroundColor: 'blue'}} />
<View style={{flex: 1, width:'100%', backgroundColor: 'green', justifyContent: 'center', alignItems: 'center'}}><Text onPress={() => this._onPress()}>Toggle</Text></View>
</View>
<View style={{flex: 1}} />
</View>
)
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>