Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 来自blackberry知识库的AnimatedGIFField,don';我不知道如何操作gif_Java_Blackberry_Animated Gif - Fatal编程技术网

Java 来自blackberry知识库的AnimatedGIFField,don';我不知道如何操作gif

Java 来自blackberry知识库的AnimatedGIFField,don';我不知道如何操作gif,java,blackberry,animated-gif,Java,Blackberry,Animated Gif,我正在使用这个代码,如果有人熟悉它,它来自黑莓知识库。不管怎样,我想知道如何使用这个类操纵GIF。我可以在屏幕上看到gif,但它不断重复,不会消失。非常感谢您的帮助 公共类AnimatedGIFField扩展了位图字段 { private GIFEncodedImage _image;//要绘制的图像。 private int _currentFrame;//中的当前帧 动画序列。 private int _width;//图像的宽度 (背景框)。 private int _height;//图

我正在使用这个代码,如果有人熟悉它,它来自黑莓知识库。不管怎样,我想知道如何使用这个类操纵GIF。我可以在屏幕上看到gif,但它不断重复,不会消失。非常感谢您的帮助

公共类AnimatedGIFField扩展了位图字段 { private GIFEncodedImage _image;//要绘制的图像。 private int _currentFrame;//中的当前帧 动画序列。 private int _width;//图像的宽度 (背景框)。 private int _height;//图像的高度 (背景框)。 私有animatorhread_animatorhread

public AnimatedGIFField(GIFEncodedImage image)
{
    this(image, 0);
}

public AnimatedGIFField(GIFEncodedImage image, long style)
{
    //Call super to setup the field with the specified style.
    //The image is passed in as well for the field to
    //configure its required size.
    super(image.getBitmap(), style);

    //Store the image and it's dimensions.
    _image = image;
    _width = image.getWidth();
    _height = image.getHeight();

    //Start the animation thread.
    _animatorThread = new AnimatorThread(this);
    _animatorThread.start();
}

protected void paint(Graphics graphics)
{
    //Call super.paint. This will draw the first background
    //frame and handle any required focus drawing.
    super.paint(graphics);

    //Don't redraw the background if this is the first frame.
    if (_currentFrame != 0)
    {
        //Draw the animation frame.
        graphics.drawImage(_image.getFrameLeft(_currentFrame), _image.getFrameTop(_currentFrame),
            _image.getFrameWidth(_currentFrame), _image.getFrameHeight(_currentFrame), _image, _currentFrame, 0, 0);
    }
}

//Stop the animation thread when the screen the field is on is
//popped off of the display stack.
protected void onUndisplay()
{
    _animatorThread.stop();
    super.onUndisplay();
}


//A thread to handle the animation.
private class AnimatorThread extends Thread
{
    private AnimatedGIFField _theField;
    private boolean _keepGoing = true;
    private int _totalFrames;     //The total number of
                                    frames in the image.
    private int _loopCount;       //The number of times the
                                  animation has looped (completed).
    private int _totalLoops;      //The number of times the animation should loop (set in the image).

    public AnimatorThread(AnimatedGIFField theField)
    {
        _theField = theField;
        _totalFrames = _image.getFrameCount();
        _totalLoops = _image.getIterations();

    }

    public synchronized void stop()
    {
        _keepGoing = false;
    }

    public void run()
    {
        while(_keepGoing)
        {
            //Invalidate the field so that it is redrawn.
            UiApplication.getUiApplication().invokeAndWait(new Runnable()
            {
                public void run()
                {
                    _theField.invalidate();
                }
            });

            try
            {
                //Sleep for the current frame delay before
                //the next frame is drawn.
                sleep(_image.getFrameDelay(_currentFrame) * 10);
            }
            catch (InterruptedException iex)
            {} //Couldn't sleep.

            //Increment the frame.
            ++_currentFrame;

            if (_currentFrame == _totalFrames)
            {
                //Reset back to frame 0 if we have reached the end.
                _currentFrame = 0;

                ++_loopCount;

                //Check if the animation should continue.
                if (_loopCount == _totalLoops)
                {
                    _keepGoing = false;
                }
            }
        }
    }
}

}

不要叫
super.paint(图形)
,而是自己画所有需要画的东西。重新编写
绘制(图形)
方法,如下所示:

private boolean isPaint = true;
protected void paint(Graphics graphics) {
    if(!isPaint) return;
//  super.paint(graphics);      
    if (_currentFrame == _image.getFrameCount()-1) {
        graphics.setGlobalAlpha(0);
        isPaint = false;
    }
    graphics.drawImage(
                _image.getFrameLeft(_currentFrame),
                _image.getFrameTop(_currentFrame),
                _image.getFrameWidth(_currentFrame),
                _image.getFrameHeight(_currentFrame), _image,
                _currentFrame, 0, 0
            );
}
可能重复的