如何创建类似于黑莓应用世界的黑莓屏幕滑动动画?

5
有人知道如何使用黑莓JDE API创建类似于Blackberry App World中的Featured Items屏幕的屏幕滑动动画吗?我知道在黑莓5.0中有一些过渡API可以执行此操作。但是我想在4.6版本的OS上实现它。它使用黑莓粗体中的滚动球具有不错的滚动效果。谢谢。
2个回答

4
作为截图/位图方法的替代方案...
在屏幕的绘图方法中,您可以使用Graphics.pushContext(...)来推送剪辑区域和绘制偏移量。为了获得最佳效果,您应该在可运行的状态下进行转换,并在事件锁上同步。这将确保您的屏幕可以在过渡过程中被解除。
大致示例: < p> < code>
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();
            }
        }
    }
}

在这个平台上,不需要将动画标记为易变的,因为它会被忽略。


谢谢你的回答,希望其他人也能从中受益。 - dickyj

0
也许可以在绘制方法中使用计时器来改变图像的坐标位置。

是的,我在考虑我需要做类似的事情,我在其他网站上看到了一些代码片段可以这样做,但迄今为止还没有任何一个像App World应用程序那样完全执行此操作,我需要进行实验...谢谢。 - dickyj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接