3

次のコードを使用して、トラックボールの感度を設定します

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
    }
}

でトラックボールの感度を確認するLoginScreenTrackball.getSensitivityX()「 2147483647」が返ってきTrackball.getSensitivityY()たのnavigationMovementに対し、すぐにセットして確認すると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
        }
    }

また、 usingTrackball.getSensitivityX()およびTrackball.getSensitivityY()inを介して「2147483647」を返しますnavigationMovement


最後に、いくつかの Web 検索に基づいて、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 にジャンプすることです...など、動きごとにフィールドをバイパスします!


画面のトラックボールの感度を正しく設定するには?

4

1 に答える 1

1

また、この API の設計も理解できません。私の経験では、これらのメソッドは機能しませんでした。Screen回避策として、クラスで次のメソッドを呼び出すことができます。

Screen.setTrackballSensitivityXOffset
Screen.setTrackballSensitivityYOffset
Screen.setTrackballFilter

最初の 2 つのメソッドを使用すると、パラメーターとして渡されたオフセットを現在のユーザーの感度に追加できます。値は [-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

そのコードを画面コンストラクター内に配置できます。その画面でのみ機能します。その画面を離れると、感度 (実際にはオフセット) は通常に戻ります。

最後に、やはり screen クラスの最後のメソッドを使用すると、その画面だけにトラックボール フィルタを設定できます。したがって、次の行をコンストラクターに入れることができます。

this.setTrackballFilter(Trackball.FILTER_ACCELERATION);

画面を離れると、通常の状態に戻るはずです。

それが役に立てば幸い。

于 2012-09-25T13:52:14.277 に答える