2009-12-20 9 views

Odpowiedz

4

Jako alternatywę dla podejścia screenshot/Bitmap ...

W metodzie malarskiej ekranie można użyć Graphics.pushContext (..), aby przesunąć region wycinania i przesunięcie rysunku. Aby uzyskać najlepsze wyniki, zrób przejście w trybie umożliwiającym uruchomienie i zsynchronizuj blokadę zdarzeń. Zapewni to, że twój ekran może zostać odrzucony w połowie przejścia.

Szorstki przykład:

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

Nie trzeba zaznaczyć animacji jako lotny jak to jest ignorowany na tej platformie.

+0

dziękuję za odpowiedź, mam nadzieję, że inni również mogą okazać się pomocni. – dickyj

0

Może używać czasomierza zmianę położenia obrazów współrzędnych w metodzie malarskiej

+0

Tak, myślę, że muszę coś takiego zrobić, widziałem fragmenty kodu robiącego to na innych stronach, ale jak dotąd nie ma niczego, co robiłoby coś dokładnie takiego jak aplikacja App World, będę potrzebować do eksperymentowania ... dzięki. – dickyj