用于播放和暂停的可触摸不透明度
One Touchable Opacity for Play and Pause
我想使用一个 TouchableOpacity 来播放和暂停。
我正在使用来自 Firebase 服务器的音频和 react-native-sound 来播放和暂停音频。
这是我的代码:
constructor(props) {
super(props)
this.state = {
isPlaying: true
}
}
<TouchableOpacity
onPress= {() => {
const { isPlaying } = this.state;
var sound = new Sound(`${item.sound}`, null, (error)=> {
if (isPlaying == false) {
sound.play();
this.setState({isPlaying:!isPlaying})
console.warn("Played");
} else if(isPlaying == true){
sound.pause();
this.setState({isPlaying:!isPlaying})
console.warn("Paused");
}
})
}
}
key={i}>Play</TouchableOpacity>
我可以播放声音但不能暂停。
我是 react-native 的新手。提前致谢。
问题是您在每个 Press 上创建新的 Sound
实例,因此当您调用 sound.pause()
时,您是在另一个 Sound
实例上调用它。
在您的构造函数中或您有权访问 item.sound
的地方,实例化声音:
this.sound = new Sound(item.sound)
您的 onPress 回调应该如下所示:
onPress= {() => {
if(isPlaying) {
this.sound.pause()
} else {
this.sound.play()
}
}}
试试这个:
constructor(props) {
super(props);
this.state = {
isPlaying: false
}
this.sound = new Sound();
}
startPlaying = () => {
this.sound.play();
this.setState({ isPlaying: true });
console.warn("Now playing");
}
stopPlaying = () => {
this.sound.pause();
this.setState({ isPlaying: false })
console.warn("Now paused");
}
onPlay(item) {
const { isPlaying } = this.state;
if(!isPlaying) {
this.sound = new Sound(`${item.sound}`, null, this.startPlaying);
} else {
this.stopPlaying();
}
}
<TouchableOpacity
onPress={() => this.onPlay(item)}
key={I}
>
Play
</TouchableOpacity>
我想使用一个 TouchableOpacity 来播放和暂停。
我正在使用来自 Firebase 服务器的音频和 react-native-sound 来播放和暂停音频。 这是我的代码:
constructor(props) {
super(props)
this.state = {
isPlaying: true
}
}
<TouchableOpacity
onPress= {() => {
const { isPlaying } = this.state;
var sound = new Sound(`${item.sound}`, null, (error)=> {
if (isPlaying == false) {
sound.play();
this.setState({isPlaying:!isPlaying})
console.warn("Played");
} else if(isPlaying == true){
sound.pause();
this.setState({isPlaying:!isPlaying})
console.warn("Paused");
}
})
}
}
key={i}>Play</TouchableOpacity>
我可以播放声音但不能暂停。
我是 react-native 的新手。提前致谢。
问题是您在每个 Press 上创建新的 Sound
实例,因此当您调用 sound.pause()
时,您是在另一个 Sound
实例上调用它。
在您的构造函数中或您有权访问 item.sound
的地方,实例化声音:
this.sound = new Sound(item.sound)
您的 onPress 回调应该如下所示:
onPress= {() => {
if(isPlaying) {
this.sound.pause()
} else {
this.sound.play()
}
}}
试试这个:
constructor(props) {
super(props);
this.state = {
isPlaying: false
}
this.sound = new Sound();
}
startPlaying = () => {
this.sound.play();
this.setState({ isPlaying: true });
console.warn("Now playing");
}
stopPlaying = () => {
this.sound.pause();
this.setState({ isPlaying: false })
console.warn("Now paused");
}
onPlay(item) {
const { isPlaying } = this.state;
if(!isPlaying) {
this.sound = new Sound(`${item.sound}`, null, this.startPlaying);
} else {
this.stopPlaying();
}
}
<TouchableOpacity
onPress={() => this.onPlay(item)}
key={I}
>
Play
</TouchableOpacity>