2011-04-13 3 views
0

활동 표시기가있는 시작 화면을 디자인하려고합니다. 스플래시 화면을 만들었지 만 표시기가 추가되지 않고 레이아웃을 설정하는 동안 이미지 아래에 숨겨져 있습니다.검은 딸기에 진행 표시기가있는 스플래시 화면

어떻게 해결할 수 있습니까? , 당신이 그 자식을 말할 것이다 subpaint을()가 호출 때문에 super.paint()를 호출되어 있는지 확인해야합니다 당신이보기를 추가하여 HorizontalFieldManager에서

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

: 여기

내 코드입니다 필드 (이 경우에는보기)를 사용하여 페인트합니다. 나는 당신이 그것을 주석 처리 한 것을 본다, 그래서 당신은 아마도 그것을 망쳐 놓았을 것이다. super.paint()를 호출하기 전에 Background Painting을 수행하여 ActivityIndicatorView를 자신 만의 그림으로 은폐하지 않도록해야합니다.

중요한 코드가 아닌 주석 처리 된 코드를 제거하고 코드를 정리하여 작동 할 것으로 기대할 수 있습니까? 예를 들어 " 당신이 "코드하고"일할 "수있는 것을 시도해보십시오.

+0

위의 코드에서 서브 페인트 방법을 사용하여 saplash 화면에 내 활동 지표를 표시하는 방법을 보여 주실 수 있습니까? 덕분에 미리 ,,,,, –

+0

subpaint()는 하위 필드를 거치고 해당 필드에서 paintChild()를 호출합니다. 페인트 호출에서 super.subpaint()를 호출하면 실제로 구현할 필요가 없습니다. – jprofitt