5

ブラックベリーJDEAPIを使用して、ブラックベリーアプリワールドの注目アイテム画面に似た画面スライドアニメーションを作成する方法を知っている人はいますか?ブラックベリー5.0には、それを実行するためのいくつかの移行APIがあることを私は知っています。しかし、私はバージョン4.6OSでそれを実行しようとしています。ブラックベリーボールドのスクロールボールを使用した素晴らしいスクロール効果があります。

ありがとう。

4

2 に答える 2

4

スクリーンショット/ビットマップアプローチの代替として...

画面のpaintメソッドでは、Graphics.pushContext(..)を使用して、クリッピング領域と描画オフセットをプッシュできます。最良の結果を得るには、ランナブルで遷移を実行し、イベントロックで同期する必要があります。これにより、トランジションの途中で画面を閉じることができます。

大まかな例:

class TransitionScreen extends Screen {
    private int transitionOffset;
    private boolean isTransitionHorizontal;
    private ScreenTransition currentTransition;

    public TransitionScreen(boolean isTransitionHorizontal) {
        this.isTransitionHorizontal = isTransitionHorizontal;

        transitionOffset = getTransitionMaximum(); // So the screen starts offset
    }

    protected void paint(Graphics graphics) {
        // use transitionOffset as x or y depending on isTransitionHorizontal
        graphics.pushContext(...);
    }

    protected void onExposed() {
        transitionToOffset(0);
    }

    protected void onObscured() {
        int target = getTransitionMaximum();

        transitionToOffset(target);
    }

    private int getTransitionMaximum() {
        return isTransitionHorizontal ? Display.getWidth() : Display.getHeight();
    }

    private void transitionToOffset(int target) {
        if (currentTransition != null) {
            currentTransition.stop();
        }

        currentTransition = new ScreenTransition(target);

        getApplication().invokeLater(currentTransition);
    }
}

class ScreenTransition implements Runnable {
    private boolean animating;
    private int target;

    public ScreenTransitionUpdater(int target) {
        this.target = target;
    }

    public void stop() {
        animating = false;
    }

    public void run() {
        while(animating) {
            Object eventLock = getApplication().getEventLock();

            synchronized(eventLock) {
                // Interpolate myOffset to target

                // Set animating = false if myOffset = target

                invalidate();
            }
        }
    }
}

このプラットフォームでは無視されるため、アニメーションを揮発性としてマークする必要はありません。

于 2010-07-22T01:10:11.347 に答える
0

たぶんタイマーを使って、ペイント方法で画像の座標位置を変更します

于 2009-12-21T10:28:55.093 に答える