📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados na Especialização em Android Nativo. Recomendado revisar antes de iniciar.

📊 P18: Radar de Habilidades (Canvas 2D & Gráficos)

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


🏛️ Visão Geral & Arquitetura Visual

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).

Fluxo Visual do Radar de Habilidades com Canvas 2D

📁 Estrutura de Pastas Anti-Colisão

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

🧑‍💼 Engenharia de Software & Especificação Formal

1. Histórias de Usuário (User Stories)

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

2. Requisitos do Sistema

Requisitos Funcionais (RF)

Requisitos Não-Funcionais (RNF)


3. Diagrama de Casos de Uso

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

4. Matriz de Rastreabilidade (RTM)

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()

🛠️ Implementação Guiada (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.


🚀 Como Executar no Laboratório

1. Navegue até a subpasta do projeto

cd catalogo_projetos/android_p18_radar_canvas/mobile-android-kotlin

2. Compile e execute no emulador ou dispositivo físico

./gradlew assembleDebug
./gradlew test

🏁 Matriz de Checkpoints de Conclusão

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 ✅