DEV [component] ProgressAnimationField

Thảo luận trong 'DEV - Khu Vực Dành Cho Lập Trình Viên' bắt đầu bởi Aric Lam, 19/9/12.

  1. loading.gif
    Đây là một samples dùng để hiển thị ảnh động từ một ảnh bitmap nhiều frame...
    facebook_loading_bar_4_frames_30.png



    Mã:
    import net.rim.device.api.system.*;
    import net.rim.device.api.ui.*;
     
     
    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;
            }
        }
    }
     
    Aric Lam

    Aric Lam
    Expand Collapse

    Go & Let's go

    Tham gia ngày:
    6/4/11
    Bài viết:
    4,710
    Đã được thích:
    2,921
    #1 Aric Lam, 19/9/12
    Last edited: 19/9/12

Chia sẻ trang này

PING