Como controlar trackball comportamento no Android Views?
-
06-09-2019 - |
Pergunta
Eu tenho uma visão FrameLayout que contém um alguns botões adicionais sobrepondo-o de controle (MapView-like) e. (O xml layout é abaixo).
Eu quero permitir que o usuário pan / rolar a tela principal usando não apenas tocar, mas também a trackball. O problema é -. Usando o trackball apenas muda o foco entre todos os controles do layout, e eu não consigo encontrar uma maneira de conter o onTrackballEvent para apenas o MainView
Todas as sugestões são bem-vindas, obrigado antecipadamente.
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<FrameLayout android:id="@+id/pageView"
xmlns:panel="http://schemas.android.com/apk/res/com.yappa"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<MainView
android:id="@+id/mainView"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</MainView>
<ZoomControls android:id="@+id/ZoomControls01"
android:layout_gravity="bottom|center"
android:layout_height="wrap_content" android:layout_width="wrap_content">
</ZoomControls>
<Panel
....
</Panel>
</FrameLayout>
</merge>
Solução
O truque é substituir o dispatchTrackball
em sua exibição personalizada, e pegue os eventos.
Espero que isso ajude alguém.
Outras dicas
O deslocamento é simplesmente implementado por como mencionado antes que a propriedade focusable, definir o atributo focalizável do seu mapview a verdade e ele vai realmente movimentar o mapa com o trackball quando tiver colocado o mapview em foco.