2009-12-20 8 views
5

Est-ce que quelqu'un sait comment utiliser l'API JDE de BlackBerry pour créer une animation de diapositive semblable à l'écran Articles en vedette dans le Blackberry App World? Je suis conscient que dans BlackBerry 5.0, il y a quelques API de transition pour effectuer cela. Mais je cherche à le faire pour la version 4.6 OS. Il a l'effet de défilement agréable en utilisant la boule de défilement dans blackberry bold.Comment créer une animation de diapositives d'écran BlackBerry semblable à Blackberry App World?

Merci.

Répondre

4

Comme alternative à l'approche capture d'écran/Bitmap ...

Dans la méthode de peinture de votre écran, vous pouvez utiliser Graphics.pushContext (..) pour pousser une région d'écrêtage et un décalage de dessin. Pour de meilleurs résultats, vous devez effectuer la transition dans un runnable et synchroniser le verrouillage d'événement. Cela assurera que votre écran peut être rejeté au milieu d'une transition.

exemple rugueux:

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

Pas besoin de marquer animant aussi volatile qu'il est ignoré sur cette plate-forme.

+0

merci pour la réponse, j'espère que d'autres peuvent également trouver utile. – dickyj

0

Peut-être utiliser une minuterie pour changer la position de coordonnées des images dans la méthode de peinture

+0

Oui, je pense que je dois faire quelque chose comme ça, j'ai vu des morceaux de code sur d'autres sites, mais jusqu'à présent, il n'y en a aucun qui fasse exactement l'appli App World. expérimenter alors ... merci. – dickyj