android - 如何使用本机反应从相机胶卷中获取随机图像?
问题描述
我有要求,每次单击按钮时都需要获取随机图像。我不希望选择器出现带有图像的相机胶卷,而是应该从相机文件夹中选择随机图像并显示在图像视图中。我遵循了相机胶卷的官方FB教程。请找到如下代码
_handleButtonPress = () => {
CameraRoll.getPhotos({
first: 20,
assetType: 'Photos',
})
.then(r => {
this.setState({ photos: r.edges });
})
.catch((err) => {
});
};
但是此代码将选择最近单击的图像并显示在选择器中。而不是随机选择图像的uri并显示在imageview中。任何帮助表示赞赏。
问候,沙拉特
解决方案
设置状态后,您基本上拥有照片和所有必要的元数据:this.setState({ photos: r.edges })
您所要做的就是从那里选择一个随机图像。我是这样做的:
import React, { Component } from 'react';
import {
StyleSheet,
View,
Image,
CameraRoll,
Button
} from 'react-native';
export default class App extends Component {
constructor(props) {
super(props)
this.state = {
img: null
}
}
getRandomImage = () => {
const fetchParams = {
first: 25,
}
CameraRoll.getPhotos(fetchParams)
.then(data => {
const assets = data.edges
const images = assets.map((asset) => asset.node.image)
const random = Math.floor(Math.random() * images.length)
this.setState({
img: images[random]
})
})
.catch(err => console.log)
}
render() {
return (
<View style={styles.container}>
{ this.state.img ?
<Image
style={styles.image}
source={{ uri: this.state.img.uri }}
/>
: null
}
<Button title="Get Random Image from CameraRoll" onPress={this.getRandomImage}/>
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#F5FCFF',
},
image: {
width: '100%',
height: '75%',
margin: 10,
}
});
推荐阅读
- javascript - 无法呈现身份验证页面
- javascript - 第二个for循环条件语句不起作用
- javascript - 使用原生 javascript 连接到 MongoDB 数据库
- r - R: Vars - 用于循环/函数/应用的列列表
- perl - Perl Time::Piece 如果不是格式,则使用当前日期
- django - 如果 Django 中的模型不存在,如何自动为它创建一个对象?
- c# - 将 websockets 添加到 MVC ASP.NET C# 应用程序
- android - Android:检测打开的键盘,onApplyWindowListener 不起作用
- javascript - 我们可以在 Vue.js 中使用 jquery onscroll 函数吗?
- c# - “抱歉,此文件已被删除或移动。” 在使用 C# 代码上传文件后在 Microsoft Teams 中打开文件时