📚 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, CountDownTimer, Barra de Progresso Circular e Gestão de Tempo Real
Série Prática Android Clássico — Projeto 5 de 21
- P01: Dados RPG (2D, 3D & Ciclo de Vida)
- P02: Jogo da Memória (PNG & POC)
- P03: Genius / Simon Says Clássico & Demo de Áudio
- P04: Cartão de Visitas Digital em ConstraintLayout
- ➡️ P05 (este): Quiz Game com Cronômetro Decrescente
O Quiz Game com Cronômetro Decrescente introduz a mecânica de contagem regressiva em tempo real com alta precisão temporal no Android. Utilizando a classe utilitária CountDownTimer, o aplicativo gerencia o tempo limite por pergunta (ex: 15 segundos), sincroniza o avanço visual em um componente ProgressBar circular com transição dinâmica de cores (verde para tempo seguro, amarelo para alerta e vermelho para iminência de estouro) e pontua os acertos com bônus de agilidade.
Todos os artefatos de código, modelos de questão e arquivos XML estão na subpasta canônica mobile-android-kotlin/:
catalogo_projetos/android_p05_quiz_timer/
├── assets/
│ ├── arquitetura_quiz_timer.svg
│ └── screenshot_p05_start.png
├── mobile-android-kotlin/
│ ├── app/
│ │ ├── src/
│ │ │ └── main/
│ │ │ ├── java/br/com/curso/quiztimer/
│ │ │ │ ├── model/Questao.kt
│ │ │ │ └── MainActivity.kt
│ │ │ ├── res/
│ │ │ │ ├── drawable/
│ │ │ │ └── layout/activity_main.xml
│ │ │ └── AndroidManifest.xml
│ │ └── 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 Quiz | Quero ver uma contagem regressiva de 15 segundos para responder cada pergunta. | Redução visual contínua na barra de progresso a cada segundo percorrido. | Alta |
| US-02 | Jogador de Quiz | Quero selecionar uma resposta e saber imediatamente se acertei ou errei. | Indicação em verde para acerto, vermelho para erro e cancelamento do timer. | Alta |
| US-03 | Jogador de Quiz | Quero receber pontuação bônus caso responda nos primeiros segundos da pergunta. | Cálculo de pontos proporcionais ao tempo restante no relógio. | Alta |
| US-04 | Jogador de Quiz | Quero que a questão seja considerada errada por timeout se o relógio zerar. | Disparo automático de avanço para a próxima questão via callback onFinish(). |
Média |
| US-05 | Desenvolvedor Mobile | Quero cancelar o timer no ciclo onPause() ou onDestroy() para evitar vazamento de memória. |
Invocação preventiva de countDownTimer?.cancel(). |
Baixa |
CountDownTimer com duração de 15000ms e tique de 1000ms.ProgressBar no callback onTick(millisUntilFinished).Questao.flowchart TD
Player([fa:fa-user Jogador de Quiz])
Timer[(fa:fa-clock CountDownTimer)]
subgraph AppQuiz ["⏱️ Quiz Game (mobile-android-kotlin)"]
UC01["Carregar Nova Pergunta"]
UC02["Iniciar Cronômetro Regressivo"]
UC03["Submeter Alternativa Escolhida"]
UC04["Tratar Estouro de Tempo (Timeout)"]
UC05["Exibir Placar com Bônus de Tempo"]
end
Player --> UC01
UC01 --> UC02
UC02 --> Timer
Timer -.->|onTick| UC02
Timer -.->|onFinish| UC04
Player --> UC03
UC03 --> UC05
UC04 --> UC05
| ID Requisito | História de Usuário | Artefato de Código | Teste de Aceitação |
|---|---|---|---|
| RF-01 | US-02 | mobile-android-kotlin/app/src/main/res/layout/activity_main.xml |
testQuestionLayoutComponents() |
| RF-02 | US-01 | mobile-android-kotlin/app/.../MainActivity.kt |
testCountDownTimerTicks() |
| RF-03 | US-01 | mobile-android-kotlin/app/.../MainActivity.kt |
testProgressBarSyncWithTimer() |
| RF-04 | US-02, US-04 | mobile-android-kotlin/app/.../MainActivity.kt |
testDisableButtonsOnSubmit() |
| RF-05 | US-03 | mobile-android-kotlin/app/.../MainActivity.kt |
testScoreBonusCalculation() |
MainActivity.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_p05_quiz_timer/mobile-android-kotlin
./gradlew assembleDebug
./gradlew test
| Checkpoint | Meta Técnica | Critério de Aceite | Status |
|---|---|---|---|
| CP-01 | Mecanismo de Temporização | CountDownTimer com tiques de 1s e cancelamento seguro |
PASS ✅ |
| CP-02 | Sincronismo com ProgressBar | Barra decrescente proporcional ao tempo restante | PASS ✅ |
| CP-03 | Cálculo de Bônus de Tempo | Multiplicador de pontos para respostas rápidas | PASS ✅ |
| CP-04 | Tratamento de Timeout | Avanço automático para a próxima pergunta ao zerar o tempo | PASS ✅ |
| CP-05 | Suíte de Testes Automatizados | Testes de unidade e UI aprovados com 100% de sucesso | PASS ✅ |