O Rocker é uma biblioteca leve e flexível projetada para implementar joysticks virtuais em dispositivos Android. Ideal para jogos, controle remoto de robôs ou qualquer cenário que exija navegação direcional suave na tela, o componente oferece personalização visual e comportamental por meio de atributos XML e callbacks programáticos.
Configuração do Projeto
Para utilizar o Rocker, inclua o repositório JitPack no arquivo build.gradle do nível do projeto:
allprojects {
repositories {
maven { url 'https://jitpack.io' }
}
}
Em seguida, adicione a dependência no módulo do aplicativo:
dependencies {
implementation 'com.github.GcsSloop:Rocker:v1.1.1'
}
Uso Básico
No layout XML, declare o RockerView com os atributos desejados. É necessário definir o namespace personalizado:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.gcssloop.widget.RockerView
android:id="@+id/virtual_stick"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:area_radius="80dp"
app:rocker_radius="30dp"
app:area_background="@drawable/bg_zone"
app:rocker_background="@drawable/bg_knob" />
</LinearLayout>
No código Java/Kotlin, registre um ouvinte para capturar eventos do joystick:
RockerView stick = findViewById(R.id.virtual_stick);
stick.setListener((eventType, angle, distance) -> {
if (eventType == RockerView.EVENT_ACTION) {
// Atualiza direção com base no ângulo e distância
updateDirection(angle, distance);
} else if (eventType == RockerView.EVENT_CLOCK) {
// Executa lógica contínua (ex: movimento constante)
applyContinuousInput(angle, distance);
}
});
Cenários de Aplicação
- Jogos móveis: Substitui botões direcionais por um controle analógico mais intuitivo em jogos de ação, corrida ou avenutra.
- Controle de dispositivos IoT: Permite ajuste preciso em aplicações de automação residencial ou operação de drones.
- Simuladores educacionais: Facilita interações em ambientes de aprendizado interativo, como laboratórios virtuais.
Recomenda-se ajustar os raios da área e do botão, além dos recursos visuais, para alinhar o componente à identidade visual do aplicativo. A sensibilidade pode ser calibrada indiretamente por meio da lógica associada ao valor de distance, que varia entre 0 e 1.
O Rocker funciona como um componente autônomo, podendo ser integrado facilmente a motores gráficos como Unity ou frameworks nativos do Android, desde que a camada de rendreização permita sobreposição de views personalizadas.