blackberry java-me marquee

Texto de marquesina en Blackberry



java-me marquee (1)

Quiero marcar un poco de texto en una aplicación de BlackBerry.


Aquí está. Simplemente haga una clase con el nombre MarqueeLabel y copie y pegue este código, luego puede usar esta clase para mostrar un texto de marquesina:

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