<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    讓變化成為計劃的一部分

    歡迎大家探討本Blog涉及的所有軟件課題。我的Google Talk ID:zhengyun(at)gmail.com。

    我最希望軟件帶給用戶的感受是:美好的體驗、舒適感、簡約、干凈...

    posts - 32, comments - 8, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    請參考java.util.TimerTask.

    TimerTask is something like Timer in VisualBasic. You can sepcify a time period in milliseconds

    for your requirement"一幅LOGO顯示完以后,幾秒種自動顯示下一幅LOGO".
    Here is an sample code.

    public void testTimer() {
    MyTimerTask myTimerTask 
    = new MyTimerTask();
    Timer timer 
    = new Timer();
    timer.schedule(myTimerTask, 
    500010000); //wait for 5 seconds and then call the function every 

    10 seconds
    }


    class MyTimerTask extends TimerTask {
    public void run() {
    //This method will be called every 10 Seconds

    Image im 
    = Image.createImage(imageData, 0, imageData.length);
    if(im == null)
    System.out.println(
    "NULL IMAGE");
    System.out.println(
    "The Size of the Byte Array is:" +imageData);
    if(frm.size() > 0)
    for(int i = 0; i < frm.size(); i++)
    frm.delete(i);
    frm.append(im);
    disp.setCurrent(frm);

    }

    }


     

    另外,對于你所說的是不是應該叫做SplashScreen,那么國外曾經有人給出這么一個例子,雖然不是周期性地顯示一張又一張的圖片,而是利用TimerTask周期性地repaint畫布,畫出一種Splash Screen的感覺,你可以參考:

    import java.util.*;

    import javax.microedition.lcdui.*;

    public class WaitCanvas
    extends Canvas {
    private int mCount, mMaximum;
    private int mInterval;

    private int mWidth, mHeight, mX, mY, mRadius;
    private String mMessage;

    public WaitCanvas() {
    mCount 
    = 0;
    mMaximum 
    = 36;
    mInterval 
    = 100;

    mWidth 
    = getWidth();
    mHeight 
    = getHeight();

    // Calculate the radius.
    int halfWidth = (mWidth - mRadius) / 2;
    int halfHeight = (mHeight - mRadius) / 2;
    mRadius 
    = Math.min(halfWidth, halfHeight);

    // Calculate the location.
    mX = halfWidth - mRadius / 2;
    mY 
    = halfHeight - mRadius / 2;

    // Create a Timer to update the display.
    TimerTask task = new TimerTask() {
    public void run() {
    mCount 
    = (mCount + 1% mMaximum;
    repaint();
    }

    }
    ;
    Timer timer 
    = new Timer();
    timer.schedule(task, 
    0, mInterval);
    }


    public void setMessage(String s) {
    mMessage 
    = s;
    repaint();
    }


    public void paint(Graphics g) {
    int theta = -(mCount * 180 / mMaximum);


    // Clear the whole screen.
    g.setColor(255255255);
    g.fillRect(
    00, mWidth, mHeight);

    // Now draw the pinwheel.
    g.setColor(000);

    g.drawArc(mX, mY, mRadius, mRadius, 
    0360);

    g.fillArc(mX, mY, mRadius, mRadius, theta 
    + 2020);
    //g.fillArc(mX, mY, mRadius, mRadius, theta + 60, 60);
    //g.fillArc(mX, mY, mRadius, mRadius, theta + 90, 90);
    //g.fillArc(mX, mY, mRadius, mRadius, theta + 120, 120);

    // Draw the message, if there is a message.
    if (mMessage != null)
    g.drawString(mMessage, mWidth 
    / 2, mHeight,
    Graphics.BOTTOM 
    | Graphics.HCENTER);
    }

    }



    上面那個是利用TimerTask自動定時填充圖形來展示Splash Screen的,那么下面這個就是顯示圖片來Splash Screen了:


     

    import java.util.*;
    import javax.microedition.lcdui.*;

    public class Splash extends Canvas {

    private Display display;
    private Displayable next;
    private Timer timer=new Timer();

    public Splash (Display display,Displayable next) {
    this.display=display;
    this.next=next;
    display.setCurrent(
    this);
    }


    protected void showNotify () {
    timer.schedule( 
    new TimerTask () public void run() {
    displayNext(); }
    }
    ,8000);
    }


    protected void hideNotify() {
    timer.cancel();
    }


    protected void keyPressed (int keycode) {
    displayNext();
    }


    protected void pointerPressed (int x, int y) {
    displayNext();
    }


    private void displayNext() {
    display.setCurrent(next);
    }
     

    protected void paint (Graphics g) {
    int height=this.getHeight();
    int width=this.getWidth();

    // fill background as white
    g.setColor(0xFFFFFF);
    g.fillRect(
    0,0,width,height);

    Image logo
    =null;
    try {
    logo
    =Image.createImage("/images/logo.png");
    }
     catch (Exception ignore) {}

    g.drawImage(logo,width
    /2,height/2,g.HCENTER|g.VCENTER);
    }


    }
     

    here
    's the calling method in your midlet(it passes the Display and current Displayable):

    /**
    * This shows the splash
    */


    private void showSplash () {
    new Splash (display,MenuList); 
    }



    還有一種辦法是利用currentTimeMillis。
    無非就是利用System.currentTimeMillis()+2000先行計算出什么時間該顯示
    后一幅圖片了,如果靠while循環不斷檢測發現時間到了,就換那張圖片。
    private boolean showImage;


    void someMethod()
    {
    long time = System.currentTimeMillis()+2000;

    showImage 
    = true;
    while(System.currentTimeMillis()<time)
    {
    repaint();
    serviceRepaints();
    }

    showImage 
    = false;
    }


    public void paint()
    {

    if(showImage)
    g.drawImage(img,offsetX,MAX_Y
    /2,g.LEFT|g.VCENTER);
    }

    efei說:
    “你要做的無非就是一個延時,過一定時間就換一幅圖片。至于怎么來判斷這個延時,方法多種多樣,用線程,用TimerTask,用System.currentTimeMillis(),基本上都一樣

    個人比較傾向于使用線程作為固定的時鐘脈沖來驅動游戲。

    對于System.currentTimeMillis(),我只能告訴你兩點,一是它的作用是取得當前時間,二呢,用這個方法如果只是簡單比較時間,那么如果中斷游戲,過一段時間再恢復,就會存在問題。

    主站蜘蛛池模板: 免费毛片在线播放| 2021久久精品免费观看| 又爽又黄无遮挡高清免费视频 | 亚洲AV福利天堂一区二区三| 九九九国产精品成人免费视频| 国产免费拔擦拔擦8x| 亚洲a∨无码精品色午夜| 国产高清免费在线| 免费福利在线观看| 国产亚洲?V无码?V男人的天堂 | 久久精品国产亚洲AV麻豆~| 成在人线av无码免费高潮喷水| 国产V亚洲V天堂无码| 日本免费高清视频| 亚洲色大成网站www永久| 精品女同一区二区三区免费站| 亚洲午夜精品在线| 午夜免费福利在线| 一区二区免费国产在线观看| 亚洲乱码中文字幕综合| 免费成人在线电影| 亚洲精品伊人久久久久| 国内自产拍自a免费毛片| 日日摸夜夜添夜夜免费视频| 亚洲一区二区三区偷拍女厕| 亚洲视频在线观看免费| 亚洲av无码专区在线| 国产小视频免费观看| 中文字幕免费在线观看动作大片| 亚洲AV无码码潮喷在线观看| 50岁老女人的毛片免费观看| 国产 亚洲 中文在线 字幕| 亚洲国产成人a精品不卡在线| 18禁在线无遮挡免费观看网站| 亚洲国产一区在线| 成年男女男精品免费视频网站 | 亚洲国产婷婷六月丁香| 无遮免费网站在线入口| 无码免费又爽又高潮喷水的视频| 久久亚洲精品国产精品黑人| 性色av无码免费一区二区三区|