2011-04-13 61 views
0

我正試圖設計一個啓動畫面及其上的活動指示器。 我成功創建了一個啓動畫面,但我的指示燈沒有被添加到它, 它正在隱藏在圖像下方,而我正在設置其佈局。黑莓手機上的進度指示器閃屏

我該如何解決這個問題?

這裏是我的代碼:

package mypackage; 
import java.util.Timer; 
import java.util.TimerTask; 

import net.rim.device.api.system.Application; 
import net.rim.device.api.system.Bitmap; 
import net.rim.device.api.system.Display; 
import net.rim.device.api.ui.Field; 
import net.rim.device.api.ui.Graphics; 
import net.rim.device.api.ui.UiApplication; 
import net.rim.device.api.ui.component.progressindicator.ActivityIndicatorController; 
import net.rim.device.api.ui.component.progressindicator.ActivityIndicatorModel; 
import net.rim.device.api.ui.component.progressindicator.ActivityIndicatorView; 
import net.rim.device.api.ui.container.HorizontalFieldManager; 
import net.rim.device.api.ui.container.VerticalFieldManager; 

import net.rim.device.api.ui.container.MainScreen; 
//import net.rim.device.api.ui.extension.container.EyelidFieldManager; 


public final class SplashScreen extends SplashScreenPage 
{ 


    public SplashScreen() 
    {   
    super(Bitmap.getBitmapResource("splash-blackberry.png"),2); 
    } 
} 
class SplashScreenPage extends MainScreen 

{ 

    VerticalFieldManager vfm= new VerticalFieldManager(Field.FIELD_VCENTER); 


HorizontalFieldManager hfm = new HorizontalFieldManager(Field.FIELD_VCENTER) 
    { 
     protected void sublayout(int maxWidth, int maxHeight) 
    { 
     super.sublayout(360,60); 
     setExtent(360, 60); 

     Field field = getField(0); 
     layoutChild(field,140, 60); 
     setPositionChild(field, 100,200); 
} 



    public void paint(Graphics graphics) 
    { 
     //Draw the background image and then call paint. 

    // super.paint(graphics); 
     //graphics.clear(); 

     // graphics.setBackgroundColor(0x000000); 
      //graphics.drawBitmap(0, 0, 360, 480, popup, 0, 0); 

      // super.paint(graphics); 
      // graphics.clear();  
     // graphics.drawBitmap(0, 0, 360, 480, popup, 0, 0); 


    }    

    }; 





    ActivityIndicatorView view = new ActivityIndicatorView(Field.USE_ALL_WIDTH); 
    ActivityIndicatorModel model = new ActivityIndicatorModel(); 
    ActivityIndicatorController controller = new ActivityIndicatorController(); 






    boolean notlogged = false; 
    Bitmap popup; 
    SplashScreenPage screen1 = 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; 
    //SplashScreen page is here 
    public SplashScreenPage(Bitmap popup, final int seconds) 
    { 

     view.setController(controller); 
     view.setModel(model); 
     view.setLabel("Loading"); 
     controller.setModel(model); 
     controller.setView(view); 

     model.setController(controller);   

     Bitmap bitmap = Bitmap.getBitmapResource("images.jpeg"); 
     view.createActivityImageField(bitmap, 5, Field.FIELD_BOTTOM); 

     // add(view); 

    add(hfm); 
    hfm.add(view); 
    // add(vfm); 
    // vfm.add(Bitmap.getBitmapResource("splash-blackberry.png")); 






      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 * 15) { 
         showSplash = false; 
         splashDisplayed = true; 
         splashTimer.cancel(); 
         invalidate(); 


         synchronized (Application.getEventLock()){ 

          UiApplication.getUiApplication().pushScreen(new secondscreen()); 
           notlogged = true; 
          } 

         } 
       } 
      } 
     }; 

     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); 
      // super.paint(graphics); 
      // graphics.clear(); 
     } 
    } 

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


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

    public void onExposed() { 
      if(notlogged) 
      UiApplication.getUiApplication().popScreen(this); 
     } 
} 

回答

0

在你Horizo​​ntalFieldManager要添加視圖,你需要確保你在呼喚super.paint(),因爲它被稱爲subpaint(),它會告訴其子字段(在這種情況下查看)來繪製自己。我看到你已經註釋掉了,所以你可能已經搞亂了。此外,請確保在調用super.paint()之前進行背景繪畫,以免用自己的繪畫掩蓋ActivityIndi​​catorView。

是否有可能通過並清理代碼(將註釋掉的代碼除去並不重要),直到您希望它能夠正常工作的程度,因此更容易區分「嘗試任何你可以「編碼」和「工作」的代碼。

+0

可以請你在上面的代碼中展示如何使用subpaint方法,以便我可以在saplash屏幕上顯示我的活動indiactor。在此先感謝,,,, – 2011-04-14 11:19:34

+0

subpaint()只是通過子字段並調用paintChild()。如果您從繪畫調用中調用super.subpaint(),則不必實際執行它。 – jprofitt 2011-04-14 13:02:08