Я пытаюсь создать приложение ReactNative с анимированной кнопкой. Проблема в том, что эта анимация не работает правильно в первый раз после запуска приложения. Есть немного белого мерцания. Но после запуска анимации в первый раз все работает как положено:
![Animation of the problem.](https://i.stack.imgur.com/Fjs3F.gif)
Я уже пытался предварительно загрузить изображение несколькими способами, но безуспешно.
Это мой минимальный рабочий пример, обратите внимание, что если есть несколько разных изображений, мерцание происходит, если загружается новое изображение (например, у меня есть две синие кнопки, и после того, как я нажал первую, вторая будет работать нормально, но если я затем коснусь оранжевой кнопки, она снова начнет мигать в первый раз, по крайней мере, если я не нажал еще одну оранжевую кнопку после запуска приложения.):
import React, { Component } from 'react';
import {StyleSheet, Text, TouchableWithoutFeedback, View, Image, ScrollView,
Button, BackHandler} from 'react-native';
export default class Touchables extends Component {
constructor(props) {
super(props);
this.state = {alarm1: (<Image source={require("./assets/alarmoff.png")}
style={styles.imageButton}/>),
}
}
componentWillMount(){
//trying to preload all Images, but it does not help.
(<Image source={require("./assets/alarmon.png")} style=
{styles.imageButton}/>)
}
render() {
return (
<ScrollView style={styles.contentContainer}>
<View style={{flex: 3, flexDirection: 'row'}}>
<View style={styles.container}>
<TouchableWithoutFeedback onPressIn={() => this.setState({alarm1:
<Image source={require("./assets/alarmon.png")} style={styles.imageButton}/>})} onPressOut={() => this.setState({alarm1: <Image source={require("./assets/alarmoff.png")} style={styles.imageButton}/>})}>
<View style={styles.button}>
{this.state.alarm1}
</View>
</TouchableWithoutFeedback>
<Text style={styles.text}>This button flickers on first click. Restart App completly to see the issue. Reloading is not enough.</Text>
</View>
</View>
<View>
<Button
onPress={() => BackHandler.exitApp()}
title="Exit App"
color="#841584"
accessibilityLabel="Android only I guess."
/>
</View>
</ScrollView>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 2,
backgroundColor: '#fff',
alignItems: 'center',
justifyContent: 'center',
marginBottom: 30
},
button: {
backgroundColor: '#fff',
borderRadius: 20,
padding: 10,
marginBottom: 20,
shadowColor: '#303838',
shadowOffset: { width: 0, height: 5 },
shadowRadius: 10,
shadowOpacity: 0
},
contentContainer: {
paddingVertical: 20,
flex: 1,
backgroundColor: '#fff',
},
text:{
color: '#000',
marginBottom: 30
},
imageButton: {
flex: 1,
width: 240,
height: 200,
marginBottom: -15,
marginTop: 10,
resizeMode: 'cover'
}
});
Итак, мой вопрос: как я могу остановить мерцание изображения после запуска приложения?
Полная версия небольшого демонстрационного приложения, созданного мной, чтобы показать мою проблему, доступна в моем Github Repository