1. ホーム
  2. actionscript-3

[解決済み] Flex 4:FlexでGIFアニメーションを使用することはできません。

2022-02-05 22:37:42

質問

私は非常にFlexに新しいですし、今どのように仕事のプロジェクトのためのGIFアニメーションを使用することを学ぶ。以下の例では、非常に単純なフラッシュプレーヤー(テスト目的)です。私が行う必要があるすべては、プレーヤーが再生されると、実行中のspinner.gifを表示することです。スピナーなしでは、プレーヤーは問題なく動作していますが、私が "show_spinner" 関数と行を追加したとき、画面には何も表示されません。

<local:AnimatedGIFImage id="spinner" source="spinner.gif" visible="false" verticalCenter="0" horizontalCenter="0"/> .

ブルザーウィンドウは単に空白です。Webで検索してみましたが、まだ答えは見つかりませんでした。私はフラッシュプレイヤーのコンポーネント表示方法を完全に理解していないと思います...。何かアドバイスがあれば、とてもありがたいです。

Spinner.mxmlファイルです。

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
                xmlns:local="*"
                xmlns:s="spark.components.*" layout="vertical" verticalAlign="top"
                backgroundColor="white"
                viewSourceURL="srcview/index.html"
                creationComplete="initApp()">
    <mx:Script>
        <![CDATA[
        import mx.events.VideoEvent;

        private function videoDisplay_ready():void {
            videoDisplay.visible = true;
            controlBar.visible = true;
        }

        private function show_spinner(evt:mx.events.VideoEvent):void {
            if (evt.state == "playing") {
                spinner.setVisible(true);
            } else {
                spinner.setVisible(false);
            }
        }

        private function initApp(){
            videoDisplay.addChild(spinner);
        }
        ]]>
    </mx:Script>
    <s:Group>
        <mx:VideoDisplay id="videoDisplay" visible="false" width="{200}" height="{200}"
                         ready="videoDisplay_ready()"
                         source="http://www.derekentringer.com/flv/purple_plasma.flv"
                         stateChange="show_spinner(event)">
        </mx:VideoDisplay>

        <mx:ControlBar id="controlBar" visible="false">
            <mx:Button id="play" name="play" label="Play" click="videoDisplay.play()"></mx:Button>
            <mx:Button id="pause" name="pause" label="Pause" click="videoDisplay.pause()"></mx:Button>
        </mx:ControlBar>

        <local:AnimatedGIFImage id="spinner" source="spinner.gif" visible="false" verticalCenter="0" horizontalCenter="0"/>

    </s:Group>
</mx:Application>

アニメーテッドGIFImage.as ファイル (以下 http://iamjosh.wordpress.com/2009/02/03/animated-gifs-in-flex/ ):

package
{
import flash.net.URLRequest;

import mx.controls.Image;
import mx.core.UIComponent;

import org.bytearray.gif.player.GIFPlayer;

public class AnimatedGIFImage extends Image
{
    private var _gifImage  : UIComponent;

    public function AnimatedGIFImage()
    {
        super();
        this._gifImage  = new UIComponent();
    }

    override public function set source(value : Object) : void
    {
        if (!value is String)
        {
            throw new ArgumentError("Source must be of type String");
        }

        super.source = value;
    }

    override protected function createChildren() : void
    {
        super.createChildren();
        var player : GIFPlayer = new GIFPlayer();
        player.load(new URLRequest(this.source as String));
        this._gifImage.addChild(player);
    }

    override protected function updateDisplayList(unscaledWidth : Number, unscaledHeight : Number) : void
    {
        this.addChild(this._gifImage);
        super.updateDisplayList(unscaledWidth, unscaledHeight);
    }
}
}

解決方法は?

ひとつだけ、試してみてください。

  • プロジェクトを右クリックし、[プロパティ]をクリックします。
  • Flex Compiler"]をクリックします。
  • 非エンベデッドファイルを出力フォルダにコピーする"がチェックされていることを確認します。

これにより、画像は出力フォルダ(通常はプロジェクトのbin-debug)にコピーされるようになります。コンパイルした後、実際にそのフォルダを開いて、ファイルがちゃんと入っているかどうか確認することができます。もし入っていなければ、手動でファイルをコピーして、それがうまくいくかどうか見てください。あるいは、その場所でまったく動作しないかどうかを確認するために、通常の画像を試してみることもできます。

がんばってください。