5

有谁知道如何使用黑莓 JDE API 创建类似于 Blackberry App World 中的 Featured Items 屏幕的屏幕幻灯片动画?我知道在黑莓 5.0 中,有一些转换 API 可以执行此操作。但我希望为 4.6 版操作系统做到这一点。它使用黑莓粗体的滚动球具有很好的滚动效果。

谢谢。

4

2 回答 2

4

作为屏幕截图/位图方法的替代方案......

在屏幕的绘制方法中,您可以使用 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();
            }
        }
    }
}

无需将动画标记为 volatile,因为它在此平台上被忽略。

于 2010-07-22T01:10:11.347 回答
0

也许使用计时器来改变paint方法中图像的坐标位置

于 2009-12-21T10:28:55.093 回答