2009-12-20 63 views
5

是否有人知道如何使用黑莓JDE API創建類似於黑莓App World中的精選項目屏幕的屏幕幻燈片動畫?我知道,在黑莓5.0中,有一些轉換apis來執行此操作。但我期待爲4.6版OS做到這一點。它使用黑莓大膽的滾動球具有很好的滾動效果。如何創建類似於黑莓App World的黑莓屏幕幻燈片動畫?

謝謝。

回答

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(); 
      } 
     } 
    } 
} 

無需標記,因爲它是在這個平臺上忽略動畫揮發性。

+0

感謝您的回答,希望其他人也可以找到有用的。 – dickyj 2010-07-22 11:59:44

0

也許用一個定時器來改變座標在paint方法

+0

是的,我想我需要做類似的事情,我在其他網站上看到了一些代碼,但到目前爲止沒有任何事情與App World應用完全相同,我需要試驗然後......謝謝。 – dickyj 2009-12-23 05:00:24