Заставка не работает - PullRequest
       4

Заставка не работает

0 голосов
/ 16 февраля 2011

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

Так что это работает -

pushScreen(new WelcomeScreen());

Но не это -

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

Во втором сценарии экран меню отображается сразу, но незаставка.

Вот код заставки - два класса.

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 Ответ

1 голос
/ 17 февраля 2011

Похоже, проблема в том, что MenuScreen нажимается сразу после WelcomeScreen. Вам нужно будет вставить какой-то механизм, который ждет, пока WelcomeScreen «закончит», прежде чем нажать MenuScreen.

Возможно, создайте объект Listener, который будет передан в WelcomeScreen. Затем, когда WelcomeScreen «заканчивает», он вызывает Слушателя (например, myListener.splashScreenFinished()). Затем реализация Listener создаст и нажмет 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();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...