2013-09-02 3 views
1

Я пытаюсь создать приложение, в котором есть домашний экран (MyScreen), в Blackberry, который делает изображение плавающим снизу до середины экрана. Затем после этого я хочу нажать еще один экран, который приносит экран входа или что-то (NewScreen ниже).Проблема с Blackberry Animation на главном экране приложения

Я получаю пустой экран после анимации. При нажатии назад один раз, я получаю экран, который я выталкивал из экрана анимации. Пожалуйста, помогите мне: где я должен нажать, чтобы получить идеальный результат?

import net.rim.device.api.animation.AnimatedScalar; 
import net.rim.device.api.animation.Animation; 
import net.rim.device.api.animation.Animator; 
import net.rim.device.api.animation.AnimatorListener; 
import net.rim.device.api.system.Bitmap; 
import net.rim.device.api.system.Display; 
import net.rim.device.api.system.EncodedImage; 
import net.rim.device.api.ui.Color; 
import net.rim.device.api.ui.Graphics; 
import net.rim.device.api.ui.Screen; 
import net.rim.device.api.ui.TransitionContext; 
import net.rim.device.api.ui.Ui; 
import net.rim.device.api.ui.UiApplication; 
import net.rim.device.api.ui.UiEngineInstance; 
import net.rim.device.api.ui.container.MainScreen; 
import net.rim.device.api.ui.container.PopupScreen; 

/** 
* A class extending the MainScreen class, which provides default standard 
* behavior for BlackBerry GUI applications. 
*/ 

public final class MyScreen extends MainScreen implements AnimatorListener { 
    private RectangleToMove _rect; 
    private Animator _animator; 
    private Animation _xanimation; 
    private Animation _yanimation; 
    private boolean _bAnimating; 
    public static final int BALL_WIDTH = 50; 
    public Bitmap splashimg; 

    static TransitionContext transitionContextIn; 
    static TransitionContext transitionContextOut; 
    static UiEngineInstance engine = Ui.getUiEngineInstance(); 

    /** 
    * Creates a new MyScreen object 
    */ 

    public MyScreen() { 
     EncodedImage img = EncodedImage.getEncodedImageResource("logo.png"); 
     splashimg = img.getBitmap(); 
     _bAnimating = false; 
     int midScreen = (Display.getWidth()/2) - img.getWidth()/2; 
     int endScreen = Display.getHeight(); 
     _rect = new RectangleToMove(midScreen, BALL_WIDTH); 
     _animator = new Animator(30); 
     _animator.setAnimatorListener(this); 
     _yanimation = _animator.addAnimationFromTo(_rect.getY(), 
       AnimatedScalar.ANIMATION_PROPERTY_SCALAR, endScreen 
         - BALL_WIDTH, Display.getHeight()/2-30, 
       Animation.EASINGCURVE_LINEAR, 3000L); 
     _yanimation.setRepeatCount(1f); 
     _yanimation.begin(0); 


     UiApplication.getUiApplication().pushScreen(new NewScreen()); 

    } 

    protected void paint(Graphics g) { 
     if (_bAnimating) { 
      _rect.draw(g, splashimg); 
     }  
    } 

    public void animatorUpdate() { 
     invalidate(); 
     doPaint();  
    } 

    public void animatorProcessing(boolean processing) { 
     _bAnimating = processing; 
    } 


} 

class RectangleToMove { 
    private int xPos; 
    private AnimatedScalar yPos; 

    public void draw(Graphics g, Bitmap splashimg) { 
     g.setBackgroundColor(Color.BLACK); 
     g.clear(); 
     g.setColor(Color.SLATEGRAY); 
     g.drawBitmap(xPos, yPos.getInt(), splashimg.getWidth(), 
       splashimg.getHeight(), splashimg, 0, 0); 
     /* 
     * g.fillEllipse(xPos,yPos.getInt(), 
     * xPos+MyScreen.BALL_WIDTH,yPos.getInt(),xPos, 
     * yPos.getInt()+MyScreen.BALL_WIDTH,0,360); 
     */ 
    } 

    public int getX() { 
     return xPos; 
    } 

    public AnimatedScalar getY() { 
     return yPos; 
    } 

    RectangleToMove(int x, int y) { 

     xPos = x; 
     yPos = new AnimatedScalar(y); 
    }  
} 
+0

Можете ли вы работать на переписывание свой второй абзац? Мне трудно понять, что вы описываете. Если возможно, назовите свои классы с описательными именами. Например, 'MyScreen', что вы называете« Экран анимации », и« NewScreen »- ваш« Экран входа »? Какой из них выглядит пустым? – Nate

+0

MyScreen - Animation Class & NewScreen - Экран входа в систему. Здесь, после того, как Анимация перейдет на один белый экран, он полностью пуст, когда я вернусь на этот белый экран NewScreen Comes .. И я устал, чтобы поп этот экран анимации, но он говорит, что can not Pop null Screen .. –

+0

@Nate - i Надеюсь, мой вопрос теперь ясно. –

ответ

1

Я не 100% уверен, что я понимаю вашу проблему, но я редактировал свой вопрос, чтобы описать то, что я думаю, проблема.

Когда ваша анимация заканчивается, вы видите пустой белый экран, который вам не нужен. Вы должны нажать Back/ESC, чтобы белый экран исчез, чтобы вы могли вернуться на ваш экран входа в систему (NewScreen). Я предполагаю, что вы не хотите видеть начальный экран анимации после его первого показа (возможно, потому что это загрузка, или всплеск экран).

Для этого вам нужно подождать, пока анимация завершает перед тем, как нажать второй экран. Так, удалить этот вызов pushScreen:

UiApplication.getUiApplication().pushScreen(new NewScreen()); 

, что у вас есть в MyScreen конструктора. В этот момент анимация не завершилась, поэтому слишком скоро нажать NewScreen.

Затем нажмите экран, когда AnimatorListener скажет, что анимация остановлена. Если вы не хотите, чтобы экран анимации, чтобы быть видимым, при движении задним через ваши экраны, а затем вставьте его после нажатия на второй экран:

public void animatorProcessing(boolean processing) { 
     _bAnimating = processing; 
     if (!processing) { 
     // the animation is complete 
     UiApplication.getUiApplication().pushScreen(new NewScreen()); 
     // use this line if the instance of `MyScreen` should not be 
     // visible after the user presses Back/ESC: 
     UiApplication.getUiApplication().popScreen(this); 
     } 
    } 
+0

Спасибо, что это сработало очень хорошо .. это была огромная помощь ... –

+0

Я уже проголосовал за это .. спасибо –

+0

Спасибо, я проголосовал сейчас. –