Atividade 8: Trabalhando com Imagens
Um app sem fotos é um app triste. Vamos aprender a usar o componente Image!
🎯 Objetivos desta aula
-
✓
Usar o componente nativo
<Image> - ✓ Aprender a carregar imagens locais (do projeto) e da Internet (URLs)
-
✓
Usar a propriedade
resizeModepara controlar recortes e encaixes
🖼️ O Componente Image
No HTML usamos a tag <img src="...">. No React Native, usamos o componente
<Image source={...} />. Lembre-se que ele não tem tag de fechamento dupla e
precisamos dizer qual a origem da foto.
1. Imagem Local (Do Projeto)
Estão salvas na pasta assets/. Usamos a
função auxiliar require().
<Image
source={require('./assets/logo.png')}
style={styles.logo}
/>
2. Imagem da Web (URL)
Vêm da internet. Passamos um objeto indicando a
propriedade uri.
<Image
source={{ uri: 'https://site.com/foto.jpg' }}
style={styles.fotoUrl}
/>
Como a imagem se ajusta à caixa? (resizeMode)
O que acontece se uma foto retangular for obrigada a caber
numa View quadrada? A propriedade resizeMode resolve isso:
- 🎯
'cover': A foto preenche sua caixa inteira (pode dar zoom e cortar as sobras). (Mais usado!) - 🎯
'contain': Mostra a foto inteira sem cortar, mas pode deixar faixas em branco (vazias) nas laterais se a proporção não bater. - 🎯
'stretch': Estica e esmaga a foto para preencher a caixa toda (a foto fica distorcida/feia).
💻 Exemplo Prático
Neste exemplo carregamos uma imagem bonitinha da web usando uma URL através do uri:
import React from 'react';
import { View, Text, Image, StyleSheet } from 'react-native';
export default function App() {
return (
<View style={styles.container}>
<Text style={styles.titulo}>Meu Pet Avatar</Text>
{/* Imagem vinda da Internet (URI) */}
<Image
source={{ uri: 'https://images.unsplash.com/photo-1543852786-1cf6624b9987?w=300&h=300&fit=crop' }}
style={styles.avatarFoto}
resizeMode="cover"
/>
<Text style={styles.nome}>Rex, O Gato</Text>
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
alignItems: 'center',
justifyContent: 'center',
backgroundColor: '#111827',
},
titulo: {
fontSize: 24,
fontWeight: 'bold',
color: '#fff',
marginBottom: 30
},
avatarFoto: {
width: 200, // Largura da foto
height: 200, // Altura da foto
borderRadius: 100, // Raio da borda = metade da altura vira um círculo perfeito!
borderWidth: 4,
borderColor: '#3b82f6',
marginBottom: 20 // Espaço abaixo da imagem
},
nome: {
fontSize: 18,
color: '#9ca3af'
}
});
🎮 Desafios Práticos
Copie o app do "Pet Avatar" acima pro Snack e vamos manipulá-lo!
Modificar 🛠️
- O App precisa do seu pet: encontre o link (
uri) de uma imagem quadrada de um cachorro ou do seu pet na internet, e troque na propriedade source! Lembre-se que o link vai entre aspas simples:'https://...' - Modifique também o texto que diz "Rex, O Gato" para o nome do seu novo pet.
Melhorar 🚀
Explore a ResizeMode quebrando a caixa.
- Desfaça o círculo. No StyleSheet `avatarFoto`, mude o
borderRadius: 100paraborderRadius: 10. Ele voltará a ser quadrado. - Teste visualmente mudando o
resizeMode="cover"direto na Tag do Componente Image (no painel principal do JS) para"stretch"e veja como a foto estica caso não seja originamente quadrada!
Criar ✨
Uma galeria dupla.
- Logo abaixo da tag Image original, crie mais COPIAS dela, apontando para outras imagens da internet.
- Tente alterar a Largura/Altura (
widtheheight) das imagens originais para100para caberem várias menores. O que aconteceu com o Flexbox pai? A tela centralizou os itens abaixo um do outro né?