黑莓上的字幕文本

时间:2009-11-04 06:32:33

标签: blackberry java-me marquee

我想在BlackBerry应用程序中拼写一些文字。

1 个答案:

答案 0 :(得分:-1)

在这里。只需创建一个名为MarqueeLabel的类并复制粘贴此代码,然后您可以使用此类显示选框文本:

package mypackage;

import java.util.Timer;

import java.util.TimerTask;

import net.rim.device.api.system.Display;

import net.rim.device.api.ui.DrawStyle;

import net.rim.device.api.ui.Font;

import net.rim.device.api.ui.Graphics;

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

class MarqueLabel extends LabelField {

    int currentChar = 0;

    String currentText = null;

    Font ourFont;

    private Timer _scrollTimer;

    private TimerTask _scrollTimerTask;

    public MarqueLabel(String text, long style) {

        super(text, style);     

    }

    public void paint(Graphics graphics) {

        currentText = this.getText();

        if (currentChar < currentText.length()) {

            currentText = currentText.substring(currentChar);

        }

        graphics.drawText(currentText, 0, 0, DrawStyle.ELLIPSIS, Display.getWidth());

        super.paint(graphics);

    }

    public void layout(int width, int height) {

        ourFont = this.getFont();

        setExtent(500, ourFont.getHeight());

    }

    protected void onDisplay() {

        startScroll();

    }

    protected void onUnfocus() {

        startScroll();

    }

    private void startScroll() {

        // Start scrolling

        final String fullText = this.getText();

        if (_scrollTimer == null) {

            _scrollTimer = new Timer();

            _scrollTimerTask = new TimerTask() {

                public void run() {

                    currentChar = currentChar + 2;

                    if (currentChar > fullText.length()) {

                        currentChar = 0;

                    }

                    invalidate();

                }

            };

            _scrollTimer.scheduleAtFixedRate(_scrollTimerTask, 0, 450);

        }

    }

    protected void onFocus(int direction) {

        if (_scrollTimer != null) {

            _scrollTimerTask.cancel();

            _scrollTimer.cancel();

            _scrollTimer = null;

            _scrollTimerTask = null;

        }

    }

    protected boolean navigationMovement(int dx, int dy, 

        int status, int time) {

        currentText = this.getText();

        int oldCurrentChar = currentChar;

        if (Math.abs(dx) > Math.abs(dy)) {

            if (dx > 0) {

                currentChar = Math.min(currentText.length() - 1,

                        currentChar + 1);

            } else if (dx < 0) {

                currentChar = Math.max(0, currentChar - 1);

            }

            if (oldCurrentChar != currentChar) {

                this.invalidate();

            }

            return true;

        } else {

            return super.navigationMovement(dx, dy, status, time);

        }

    }

    }