Flex アプリケーション (ブラウザー ウィンドウ全体の占有者) にローディング アニメーションを適用しようとすると問題が発生します。これに関するAdobeの記事で説明されているように、DownloadProgressBarクラスをサブクラス化しています。stageHeight
およびstageWidth
、基本クラスによって報告されたものは正しくありません。コンストラクターでは 500x375 ピクセル、他の場所では 0x0 と表示されます。なんで?
5 に答える
この問題は解決しましたか?私のフレックスアプリにも同じ問題があります。ステージは 500x375 を返します。私の回避策はきれいではありません。この関数は FlexEvent.INIT_PROGRESS で呼び出されます。したがって、アプリケーションが利用可能になったら、その小道具を使用します。
private function onFlexInitProgress( event:FlexEvent ):void {
if (Application.application != null){
var appWidth:Number = Application.application.width;
var appHeight:Number = Application.application.height;
x = (appWidth * 0.5) - (preloaderSWF.width * 0.5);
y = (appHeight * 0.5);
preloaderSWF.visible = true;
}
}
Flash BuilderのActionScriptプロジェクトで、幅と高さを100%から100%使用して、これと同じ問題が発生しました。preloaderがメインクラスをロードするまで、stage.stageWidthとstage.stageHeightが500x375であることがわかりました。その後、フルスクリーンサイズに変更されます。このため、プリローダー内のアイテムの配置が正しくありませんでした。ステージサイズを更新するのは、メインクラスのこの行であることがわかりました。
stage.scaleMode = StageScaleMode.NO_SCALE;
これが私のプリローダーにどのように実装したかです:
public function Preloader()
{
addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
}
private function onAddedToStage(event:Event):void {
removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
stage.scaleMode=StageScaleMode.NO_SCALE;
stage.align=StageAlign.TOP_LEFT;
...
}
幅/高さの測定値が0x0の場合は、読み取り時に問題のコンポーネントが完全に配置されていないことを示していることがよくあります(子コンポーネントを含む)。コンストラクターで測定値をチェックするのは確かに時期尚早です。ステージをフルスクリーンに設定し、表示しているものがすべてレイアウトされた後、おそらくアプリケーションのcreationCompleteイベントで、おそらく後で、測定値を確認することをお勧めします。次のリンクは良いリソースになるはずです:
http://blog.flexexamples.com/2007/08/07/creating-full-screen-flex-applications/
これが役立つかどうかはわかりませんが、Application.width、Application.height を使用して Flex アプリケーションのサイズを参照できると思います。
http://livedocs.adobe.com/flex/3/html/help.html?content=app_container_2.html
以下の問題は、あなたの問題に関連しているようです:
http://www.nabble.com/Stupid-Question---Flex-width-and-height-td21423345.html
http://www.nabble.com/Flex-stage-size-td20167125.html
http://dreamweaverforum.info/flex/125327-referencing-stage-flex.html
彼らが助けてくれることを願っています。
やりたいことは、サイズ変更イベントのステージにイベント リスナーを追加し、それに応じてプリローダーのサイズを調整することです。そうしないと、プリローダーが表示されている間に誰かが Flex アプリのサイズを変更しても、サイズは変更されません。
stage.addEventListener(Event.RESIZE, onStageResize);
public function onStageResize(e : Event) : void {
this.width = stage.stageWidth;
this.height = stage.stageHeight;
}
または、次のようなコードを使用して、プリローダーをステージの中央に配置することもできます。
preloader.x = this.stage.stageWidth/2 - preloader.width/2;