📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados na Especialização em Android Nativo. Recomendado revisar antes de iniciar.
v1.0 — Android Nativo, Kotlin, Custom Views, Android Canvas 2D, Paint, Geometria Analítica e Gráficos de Radar Poligonais (Spider Chart)
Série Prática Android Clássico — Projeto 18 de 21
- P17: Anime Soundboard com MediaPlayer
- ➡️ P18 (este): Radar de Habilidades com Canvas 2D
- P19: Banco de Wakanda com MVVM & Room
- P20: Alliance Battle com Finite State Machine
- P21: Duelo Jedi com Física 2D & Colisão
O projeto Radar de Habilidades (Spider Chart) ensina a desenhar componentes visuais customizados no mais baixo nível da renderização do Android através da criação de Custom Views. A aplicação implementa uma classe estendendo View, sobrescrevendo o método onDraw(Canvas), calculando vértices poligonais com trigonometria analítica ($\sin$, $\cos$), configurando pincéis estéticos com a classe Paint (antialiasing, preenchimentos semitransparentes e gradientes) e animando a transição de atributos de personagens RPG (Força, Destreza, Inteligência, Vitalidade, Agilidade e Carisma).
A Custom View, os modelos matemáticos e as telas residem na subpasta canônica mobile-android-kotlin/:
catalogo_projetos/android_p18_radar_canvas/
├── assets/
│ ├── mockup_radar_fluxo.svg
│ ├── screenshot_01_radar_guerreiro.svg
│ ├── screenshot_02_radar_ladino.svg
│ └── screenshot_03_radar_mago.svg
├── mobile-android-kotlin/
│ ├── app/
│ │ ├── src/
│ │ │ └── main/
│ │ │ ├── java/br/com/curso/radarcanvas/
│ │ │ │ ├── view/
│ │ │ │ │ └── RadarChartView.kt
│ │ │ │ └── MainActivity.kt
│ │ │ └── res/
│ │ └── build.gradle
│ ├── gradle/
│ ├── build.gradle
│ ├── gradlew
│ ├── settings.gradle
│ └── README.md
└── index.md
| ID | Persona | Narrativa da Funcionalidade | Critério de Aceitação Principal | Prioridade |
|---|---|---|---|---|
| US-01 | Jogador de RPG | Quero visualizar o gráfico poligonal de atributos do meu herói atualizado na tela. | Renderização de teia geométrica de 6 eixos perfeitamente simétricos. | Alta |
| US-02 | Jogador de RPG | Quero alternar entre classes (Guerreiro, Mago, Ladino) e ver o gráfico transicionar com animação. | Interpolação suave dos vértices em 60 FPS através de ValueAnimator. | Alta |
| US-03 | Jogador de RPG | Quero ver os nomes e valores numéricos dos atributos desenhados nas pontas dos eixos. | Tipografia nítida com anti-aliasing ativo (Paint.ANTI_ALIAS_FLAG). |
Alta |
| US-04 | Desenvolvedor Mobile | Quero que a Custom View se adapte automaticamente a qualquer tamanho de contêiner. | Cálculo responsivo no método onSizeChanged(w, h, oldw, oldh). |
Média |
| US-05 | Engenheiro de Performance | Quero garantir que nenhum objeto seja instanciado dentro do método onDraw para não acionar o GC. |
Alocação prévia de objetos Path, Paint e matrizes no construtor da View. |
Baixa |
RadarChartView : View(context, attrs).setAtributos(mapaAtributos) disparando invalidate().Paint() ou Path() durante o loop do onDraw().min(width, height) / 2.flowchart TD
Player([fa:fa-user Jogador de RPG])
Canvas[(fa:fa-palette Android Canvas 2D)]
Animator[(fa:fa-wave-square ValueAnimator)]
subgraph AppRadar ["📊 Radar de Habilidades (mobile-android-kotlin)"]
UC01["Selecionar Classe de Herói"]
UC02["Interpolar Vértices dos Atributos"]
UC03["Desenhar Teia Poligonal de Fundo"]
UC04["Renderizar Preenchimento Ciano Semitransparente"]
UC05["Desenhar Rótulos de Texto nos Eixos"]
end
Player --> UC01
UC01 --> UC02
UC02 --> Animator
Animator -.->|onAnimationUpdate| UC03
UC03 --> Canvas
UC04 --> Canvas
UC05 --> Canvas
| ID Requisito | História de Usuário | Artefato de Código | Teste de Aceitação |
|---|---|---|---|
| RF-01 | US-04 | mobile-android-kotlin/app/.../RadarChartView.kt |
testCustomViewInstantiation() |
| RF-02 | US-01 | mobile-android-kotlin/app/.../RadarChartView.kt |
testConcentricWebDrawing() |
| RF-03 | US-01 | mobile-android-kotlin/app/.../RadarChartView.kt |
testTrigonometricVerticesCalculation() |
| RF-04 | US-02 | mobile-android-kotlin/app/.../RadarChartView.kt |
testPolygonPathFilled() |
| RF-05 | US-02, US-05 | mobile-android-kotlin/app/.../RadarChartView.kt |
testSetAtributosTriggersInvalidate() |
RadarChartView.kt)ℹ️ O trecho de código que ficava aqui não correspondia ao código do projeto e foi retirado. Consulte os arquivos em
mobile-android-kotlin.
cd catalogo_projetos/android_p18_radar_canvas/mobile-android-kotlin
./gradlew assembleDebug
./gradlew test
| Checkpoint | Meta Técnica | Critério de Aceite | Status |
|---|---|---|---|
| CP-01 | Construção da Custom View | View herdando de android.view.View compilada com sucesso |
PASS ✅ |
| CP-02 | Cálculo Trigonométrico | 6 vértices poligonais posicionados com precisão angular de 60° | PASS ✅ |
| CP-03 | Anti-Aliasing e Pintura | Pincéis configurados com transparência e suavização ativas | PASS ✅ |
| CP-04 | Adaptação Responsiva | View adaptando raio e centro em onSizeChanged |
PASS ✅ |
| CP-05 | Suíte de Testes Automatizados | Testes de unidade de geometria analítica aprovados | PASS ✅ |