sistemas - En Blackberry, ¿establecer Sensibilidad Trackball no tiene ningún efecto?
sistema de recomendacion tesis (1)
Uso el siguiente código para configurar la sensibilidad de la bola de seguimiento
public class Main extends UiApplication {
public static void main(String[] args) {
Main theApp = new Main();
theApp.enterEventDispatcher();
}
public Main() {
if (Trackball.isSupported()) {
Trackball.setFilter(Trackball.FILTER_ACCELERATION);
Trackball.setSensitivityX(20);
Trackball.setSensitivityY(20);
}
pushScreen(new LoginScreen());
}
}
Aquí está la pantalla utilizada:
public class LoginScreen extends MainScreen {
public LoginScreen() {
super(MainScreen.NO_VERTICAL_SCROLL | MainScreen.NO_VERTICAL_SCROLLBAR);
add(...) // SOME COMPONENTS ARE ADDED HERE
}
}
Cuando compruebo la sensibilidad de trackball en LoginScreen
usando Trackball.getSensitivityX()
y Trackball.getSensitivityY()
en navigationMovement
, devuelve "2147483647", mientras tanto si lo revisé después de configurarlo inmediatamente en Main
, ¡devuelve "20"!
Así que moví el bloque de configuración dentro de la LoginScreen
siguiente manera:
public class LoginScreen extends MainScreen {
public LoginScreen() {
super(MainScreen.NO_VERTICAL_SCROLL | MainScreen.NO_VERTICAL_SCROLLBAR);
if (Trackball.isSupported()) {
Trackball.setFilter(Trackball.FILTER_ACCELERATION);
Trackball.setSensitivityX(20);
Trackball.setSensitivityY(20);
}
add(...) // SOME COMPONENTS ARE ADDED HERE
}
}
También devuelve "2147483647" mediante Trackball.getSensitivityX()
y Trackball.getSensitivityY()
en navigationMovement
.
Finalmente, basado en algunas búsquedas web, moví la condición dentro de navigationMovement
siguiente manera:
protected boolean navigationMovement(int dx, int dy, int status, int time) {
if (Trackball.isSupported()) {
Trackball.setFilter(Trackball.FILTER_ACCELERATION);
Trackball.setSensitivityX(20);
Trackball.setSensitivityY(20);
}
return super.navigationMovement(dx, dy, status, time);
}
el problema es que el movimiento de navegación salta del campo en el índice 0 al índice 2, al índice 4 ... etc., omitiendo en el campo con cada movimiento.
¿Cómo establecer correctamente la sensibilidad de trackball para una pantalla?
Tampoco puedo entender este diseño de API, en mi experiencia, estos métodos no funcionaron. Como solución, puede llamar a los siguientes métodos en Screen
clase de Screen
:
Screen.setTrackballSensitivityXOffset
Screen.setTrackballSensitivityYOffset
Screen.setTrackballFilter
Con los primeros dos métodos, puede agregar un desplazamiento pasado como parámetro a la sensibilidad del usuario actual. Los valores están en el rango [-100, 100] y el valor especial Integer.MAX_VALUE
también permite establecer el valor como "unset". (No me preguntes qué significa "desarmado").
Ahora viene la parte hacky. Suponiendo que 100 es el valor máximo de sensibilidad, si queremos establecerlo en 100, primero debemos obtener la diferencia entre el valor deseado y el valor real. Luego configura el desplazamiento de sensibilidad a la pantalla. En aras de la brevedad, no estoy verificando si el valor está dentro del rango:
int desiredSensitivityX = 100; //your value here
int offsetX = desiredSensitivityX - Trackball.getSensitivityXForSystem(); // make sure offset is not out of range
this.setTrackballSensitivityXOffset(offsetX); //here "this" is your screen
Podrías poner ese código dentro del constructor de la pantalla. Solo funciona para esa pantalla. Una vez que sale de esa pantalla, la sensibilidad (en realidad, el desplazamiento) vuelve a la normalidad.
Finalmente, el último método, también en la clase de pantalla, le permite establecer un filtro de bola de seguimiento solo para esa pantalla. Entonces puedes poner esta línea en tu constructor:
this.setTrackballFilter(Trackball.FILTER_ACCELERATION);
y debería volver a la normalidad después de salir de la pantalla.
Espero eso ayude.