React Native - 如何使用 TouchableHighlights 显示相机胶卷中的一张特定图像
React Native - How to show one specific Image from Camera Roll using TouchableHighlights
我的目标是在从 CameraRoll
到 <Image/>
触摸 (TouchableHighlight) 时以白色 space 显示图像。我找不到任何教程来执行此操作,而且我对 JavaScript 了解不多,所以我决定在 Stack Overflow 中提问。
我只是想要一个想法来实现这个目标。谢谢大家!
这是一张可以理解的图片,它更像Instagram。
这是我的代码:
state = {
photos: [],
index: null,
pickedImage: null
}
componentDidMount() {
requestExternalStoragePermission();
this.getPhotos();
};
setIndex = (index) => {
if (index === this.state.index) {
index = null
}
this.setState({ index })
};
getPhotos = () => {
CameraRoll.getPhotos({
first: 200,
assetType: 'All'
})
.then(res => {
this.setState({
photos: res.edges,
});
})
.catch((err) => {
console.log('Error image: ' + err);
});
};
render() {
return(
<View style={styles.container}>
<Image source={this.state.index} style={styles.image}/>
<ScrollView contentContainerStyle={styles.scrollView} showsVerticalScrollIndicator={false}>
{this.state.photos.map((photos, index) => {
return(
<TouchableHighlight
style={{opacity: index === this.state.index ? .5 : 1}}
onPress={() => this.setIndex(index)}
key={index}
underlayColor='transparent'
>
<Image
style={{width: width / 3, height: width /3}}
source={{uri: photos.node.image.uri}}
resizeMode='cover'
/>
</TouchableHighlight>
);
})}
</ScrollView>
</View>
);
}
首先,您使用的 <Image source={this.state.index} style={styles.image}/>
语法 错误
应该是 <Image source={{uri : this.state.pickedImage}} style={styles.image}/>
你的状态最初有 3 个值
state = {
photos: [],
index: null,
pickedImage: null
}
在您的 <TouchableHighlight/>
按钮中单击您正在将您单击的图像的索引保存到状态,并且您正在图像组件中传递该索引。这不足以显示图像
解决方案
首先,您必须通过执行
来保存您单击以说明的图像
onPress={() => this. setState({pickedImage: photos.node.image.uri})}
控制台日志this.state.pickedImage
会给你图片的uri
并将该 uri 传递给图像组件
<Image source={{uri : this.state.pickedImage}} style={styles.image}/>
最终代码看起来像
<ScrollView contentContainerStyle={styles.scrollView} showsVerticalScrollIndicator={false}>
{this.state.photos.map((photos, index) => {
return(
<TouchableHighlight
style={{opacity: index === this.state.index ? .5 : 1}}
onPress={() => this. setState({pickedImage: photos.node.image.uri})}
key={index}
underlayColor='transparent'
>
<Image
style={{width: width / 3, height: width /3}}
source={{uri: photos.node.image.uri}}
resizeMode='cover'
/>
</TouchableHighlight>
);
})}
</ScrollView>
<Image source={{uri : this.state.pickedImage}} style={styles.image}/>
我的目标是在从 CameraRoll
到 <Image/>
触摸 (TouchableHighlight) 时以白色 space 显示图像。我找不到任何教程来执行此操作,而且我对 JavaScript 了解不多,所以我决定在 Stack Overflow 中提问。
我只是想要一个想法来实现这个目标。谢谢大家!
这是一张可以理解的图片,它更像Instagram。
这是我的代码:
state = {
photos: [],
index: null,
pickedImage: null
}
componentDidMount() {
requestExternalStoragePermission();
this.getPhotos();
};
setIndex = (index) => {
if (index === this.state.index) {
index = null
}
this.setState({ index })
};
getPhotos = () => {
CameraRoll.getPhotos({
first: 200,
assetType: 'All'
})
.then(res => {
this.setState({
photos: res.edges,
});
})
.catch((err) => {
console.log('Error image: ' + err);
});
};
render() {
return(
<View style={styles.container}>
<Image source={this.state.index} style={styles.image}/>
<ScrollView contentContainerStyle={styles.scrollView} showsVerticalScrollIndicator={false}>
{this.state.photos.map((photos, index) => {
return(
<TouchableHighlight
style={{opacity: index === this.state.index ? .5 : 1}}
onPress={() => this.setIndex(index)}
key={index}
underlayColor='transparent'
>
<Image
style={{width: width / 3, height: width /3}}
source={{uri: photos.node.image.uri}}
resizeMode='cover'
/>
</TouchableHighlight>
);
})}
</ScrollView>
</View>
);
}
首先,您使用的 <Image source={this.state.index} style={styles.image}/>
语法 错误
应该是 <Image source={{uri : this.state.pickedImage}} style={styles.image}/>
你的状态最初有 3 个值
state = {
photos: [],
index: null,
pickedImage: null
}
在您的 <TouchableHighlight/>
按钮中单击您正在将您单击的图像的索引保存到状态,并且您正在图像组件中传递该索引。这不足以显示图像
解决方案
首先,您必须通过执行
来保存您单击以说明的图像onPress={() => this. setState({pickedImage: photos.node.image.uri})}
控制台日志this.state.pickedImage
会给你图片的uri
并将该 uri 传递给图像组件
<Image source={{uri : this.state.pickedImage}} style={styles.image}/>
最终代码看起来像
<ScrollView contentContainerStyle={styles.scrollView} showsVerticalScrollIndicator={false}>
{this.state.photos.map((photos, index) => {
return(
<TouchableHighlight
style={{opacity: index === this.state.index ? .5 : 1}}
onPress={() => this. setState({pickedImage: photos.node.image.uri})}
key={index}
underlayColor='transparent'
>
<Image
style={{width: width / 3, height: width /3}}
source={{uri: photos.node.image.uri}}
resizeMode='cover'
/>
</TouchableHighlight>
);
})}
</ScrollView>
<Image source={{uri : this.state.pickedImage}} style={styles.image}/>