2011-02-16 6 views
0

아래의 스플래시 화면이 올바르게 표시되지 않습니다. 스플래시 화면을 밀 때 잘 작동하지만 스플래시 화면을 누른 다음 다른 화면을 밀면 작동하지 않습니다. 환영 화면이 스플래시 화면입니다.스플래시 화면이 작동하지 않습니다.

그래서이 작품 -

pushScreen(new WelcomeScreen()); 

하지만이 -

pushScreen(new WelcomeScreen()); 
pushScreen(new MenuScreen()); 

을 menuscreen이되는 SplashScreen를 바로 표시되지 않고, 두 번째 시나리오에서.

다음은 스플래시 화면 코드입니다. 두 클래스입니다.

package screens; 

import com.src.driver.Driver; 

import net.rim.device.api.system.Bitmap; 
import net.rim.device.api.ui.component.LabelField; 

public class WelcomeScreen extends SplashScreen { 

    public WelcomeScreen() { 
     super(Bitmap.getBitmapResource("icon.png"), 5); 
     //normal mainscreen items: 
     //setTitle("SplashScreen Test"); 
     //add(new LabelField("HelloWorld!")); 
    } 
} 

package screens; 

import java.util.Timer; 
import java.util.TimerTask; 

import com.src.driver.Driver; 

import net.rim.device.api.system.Bitmap; 
import net.rim.device.api.system.Display; 
import net.rim.device.api.ui.Graphics; 
import net.rim.device.api.ui.container.MainScreen; 

public class SplashScreen extends MainScreen { 

    Bitmap popup; 
    SplashScreen screen = this; 
    private Timer splashTimer = new Timer(); 
    private TimerTask splashTask; 
    int count = 0; 
    int screenWidth = Display.getWidth(); 
    int screenHeight = Display.getHeight(); 
    int yCoord; 
    int xCoord; 
    boolean showSplash = true; 
    boolean splashDisplayed = false; 

    public SplashScreen(Bitmap popup, final int seconds) { 
     this.popup = popup; 
     xCoord = (screenWidth - popup.getWidth())/2; 
     yCoord = (screenHeight - popup.getHeight())/2; 

     splashTask = new TimerTask() { 

      public void run() { 
       if (showSplash && !splashDisplayed) { 
        count++; 
        if (count == seconds * 10) { 
         showSplash = false; 
         splashDisplayed = true; 
         splashTimer.cancel(); 
         invalidate(); 
        } 
       } 
      } 
     }; 

     splashTimer.scheduleAtFixedRate(splashTask, 100, 100); 

    } 

    protected void paint(Graphics graphics) { 
     super.paint(graphics); 
     if (showSplash && !splashDisplayed) { 
      graphics.drawBitmap(xCoord, yCoord, popup.getWidth(), popup.getHeight(), popup, 0, 0); 
      //draw border, delete if not needed: 
      //graphics.setColor(0xcccccc); 
      //graphics.drawRect(xCoord, yCoord, popup.getWidth(), popup.getHeight()); 
     } 
    } 

    protected void onUiEngineAttached(boolean attached) { 
     showSplash = true; 
     invalidate(); 
     super.onUiEngineAttached(attached); 
    } 

    //allow user to dismiss splash screen: 
    protected boolean navigationMovement(int dx, int dy, int status, int time) { 
     return DismissSplash(); 

    } 

    protected boolean navigationClick(int status, int time) { 
     return DismissSplash(); 
    } 

    protected boolean keyChar(char c, int status, int time) { 
     return DismissSplash(); 
    } 

    private boolean DismissSplash() { 
     if (showSplash) { 
      showSplash = false; 
      splashDisplayed = true; 
      invalidate(); 
      return true; 
     }else{ 
      return false; 
     } 
    } 
} 

답변

1

그것은 문제처럼 보인다는 MenuScreen이 WelcomeScreen 직후 밀어 것입니다 감사합니다. MenuScreen을 열기 전에 WelcomeScreen이 "끝내기"를 기다리는 메커니즘을 사용해야합니다.

WelcomeScreen에 전달되는 리스너 객체를 만들 수 있습니다. 그런 다음 WelcomeScreen이 "완료"되면 Listener (예 : myListener.splashScreenFinished())를 호출합니다. 그런 다음 리스너를 구현하면 MenuScreen이 만들어지고 푸시됩니다.

interface MyListener { 
    public void splashScreenFinished(); 
} 

 

class MyApp implements MyListener { 
    ... 
    public void splashScreenFinished() { 
     UiApplication.getUiApplication().invokeLater(new Runnable() { 
      public void run() { 
       pushScreen(new MenuScreen()); 
      } 
     }); 
    } 

    public void startupApp() { 
     pushScreen(new WelcomeScreen(this)); 
    } 
    ... 
} 

 

class WelcomeScreen { 
    private MyListener l; 

    public WelcomeScreen(MyListener listener) { 
     l = listener; 
     ... 
    } 

    protected onSplashTimerDone() { 
     if (l != null) 
      l.splashScreenFinished(); 
    } 
} 
+0

당신이 추가 할 수 의사 PLZ이를 달성하기 :

은 다음과 같이 보일 수 있는가? –

+0

고맙습니다. 거의 다 왔을 것 같습니다. 일단 스플래시 화면이 완료되면 빈 화면이 표시됩니다. 블랙 베리 옵션 화면을 클릭하고 메뉴 화면을 닫으면 메뉴 화면이 표시됩니다. –

+0

menuscreen을 푸시하는 코드를 실행하기 때문에 menuscreen이 화면에 푸시되지 않은 이유는 확실하지 않습니다. –

관련 문제