индикация загрузки на самом экране пользовательского интерфейса без использования отдельного экрана или всплывающего окна - PullRequest
0 голосов
/ 12 марта 2011

Я хочу отобразить экран, когда пользователь запрашивает некоторые http-соединения. Я получил несколько хороших примеров из stackoverflow и google, но все они отображают экран загрузки с помощью отдельного экрана. Я хочу показать его на том же экране, где запрос пользователя на http соединение. Если у кого-то есть идея, пожалуйста, поделитесь ею со мной, заранее спасибо.

Ответы [ 2 ]

1 голос
/ 12 марта 2011

Я обычно использую GaugeField в разделе статуса главного экрана.Установите его, используя метод setStatus (Field field).

0 голосов
/ 13 марта 2011

Если вы разрабатываете для ОС v6.0, тогда RIM предоставил API для индикации прогресса http://docs.blackberry.com/en/developers/deliverables/17971/Indicate_activity_1210002_11.jsp

Для версий ниже OS v6.0 приведенный ниже код может помочь u.i.e ProgressAnimationField - это настраиваемое поле, которое принимает растровое изображение / загрузчик img, его количество кадров и стиль.

import net.rim.device.api.system.*;
import net.rim.device.api.ui.*;

/**
 * Custom class for spinner animation
 */
public class ProgressAnimationField extends Field implements Runnable 
{
    private Bitmap _bitmap;
    private int _numFrames;
    private int _frameWidth;
    private int _frameHeight;

    private int _currentFrame;
    private int _timerID = -1;

    private Application _application;
    private boolean _visible;

    public ProgressAnimationField( Bitmap bitmap, int numFrames, long style ) 
    {
        super( style | Field.NON_FOCUSABLE );
        _bitmap = bitmap;
        _numFrames = numFrames;
        _frameWidth = _bitmap.getWidth() / _numFrames;
        _frameHeight = _bitmap.getHeight();

        _application = Application.getApplication();
    }

    public void run() 
    {
        if( _visible ) {
            invalidate();
        }
    }

    protected void layout( int width, int height ) 
    {
        setExtent( _frameWidth, _frameHeight );
    }

    protected void paint( Graphics g ) 
    {
        g.drawBitmap( 0, 0, _frameWidth, _frameHeight, _bitmap, _frameWidth * _currentFrame, 0 );
        _currentFrame++;
        if( _currentFrame >= _numFrames ) {
            _currentFrame = 0;
        }
    }

    protected void onDisplay() 
    {
        super.onDisplay();
        _visible = true;
        if( _timerID == -1 ) {
            _timerID = _application.invokeLater( this, 200, true ); 
        } 
    }

    protected void onUndisplay() 
    {
        super.onUndisplay();
        _visible = false;
        if( _timerID != -1 ) {
            _application.cancelInvokeLater( _timerID );
            _timerID = -1;
        }
    }
}
...