我使用以下代码设置轨迹球的灵敏度
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());
}
}
以下是使用的屏幕:
public class LoginScreen extends MainScreen {
public LoginScreen() {
super(MainScreen.NO_VERTICAL_SCROLL | MainScreen.NO_VERTICAL_SCROLLBAR);
add(...) // SOME COMPONENTS ARE ADDED HERE
}
}
当我使用LoginScreen
中的Trackball.getSensitivityX()
和Trackball.getSensitivityY()
navigationMovement
检查轨迹球的敏感度时,它会返回“2147483647”,同时如果我在设置后立即检查它在Main
中,它返回“20”!
所以我将设置块移动到LoginScreen
内部,如下所示:
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
}
}
它还使用Trackball.getSensitivityX()
中的Trackball.getSensitivityY()
和navigationMovement
返回“2147483647”。
最后,基于一些网络搜索,我将条件移到navigationMovement
内,如下所示:
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);
}
问题变成导航运动从索引0处的字段跳到索引2再到索引4 ......等每次运动绕过字段!
如何正确设置轨迹球对屏幕的敏感度?
答案 0 :(得分:1)
我也无法理解这个API设计,根据我的经验,这些方法没有用。作为解决方法,您可以在Screen
类中调用以下方法:
Screen.setTrackballSensitivityXOffset
Screen.setTrackballSensitivityYOffset
Screen.setTrackballFilter
使用前两种方法,您可以将作为参数传递的偏移量添加到当前用户灵敏度。值在[-100,100]范围内,特殊值Integer.MAX_VALUE
也允许将值设置为“unset”。 (不要问我是什么意思)。
现在是黑客的一部分。假设100是灵敏度的最大值,如果我们想将其设置为100,我们首先需要获得期望值和实际值之间的差异。然后将灵敏度偏移设置到屏幕。为了简洁起见,我没有检查值是否在范围内:
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
您可以将该代码放在屏幕构造函数中。它只适用于该屏幕。离开该屏幕后,灵敏度(实际上是偏移量)会恢复正常。
最后,最后一种方法(也在屏幕类中)允许您仅为该屏幕设置轨迹球过滤器。所以你可以把这一行放在你的构造函数中:
this.setTrackballFilter(Trackball.FILTER_ACCELERATION);
离开屏幕后它应该恢复正常。
希望它有所帮助。