Adobe AIR プログラミング講座

 

デバイスがステージの回転に対応しているか調べる

 


■デバイスがステージの回転に対応しているか調べる


「デバイスの物理的な向きの検出」と「ステージの回転」がサポートされているかを調べるには、 Stage.supportsOrientationChange プロパティを取得します。
 
true であれば利用できます。
 
デバイスがステージの回転に対応しているか調べる

import flash.display.Stage;
import flash.text.TextField;

// テキストフィールドを作成
var text_field:TextField = new TextField();
text_field.x = 10;
text_field.y = 10;
text_field.width = stage.stageWidth - 20;
text_field.height = 20;
text_field.border = true;
stage.addChild(text_field);

text_field.text = "ステージの回転のサポート:" + Stage.supportsOrientationChange;
 
 

 

ステージを自動的に回転する

 
サンプルをダウンロード
 


■ステージの自動回転を有効に設定する

 
「デバイスの物理的な向きにあわせて、ステージが自動回転する機能」を有効にするには、以下の設定を行います。
 
■Adobe Flash による設定方法
 
モバイル用の Adobe AIR の設定画面にある、「自動回転を有効にする」のチェックボックスをオンに変更します。
 
 
■アプリケーション記述ファイルを直接編集する方法
 
autoOrients タグを追加して true をセットします。
 
アプリケーション記述ファイルに autoOrients タグを追加する

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<application xmlns="http://ns.adobe.com/air/application/2.0">

  <id>com.yourdomain.appname</id>
  <version>1.0</version>
  <filename>test</filename>
  <description/>
  <name>test</name>
  <copyright/>

  <initialWindow>
    <content>test.swf</content>
    <systemChrome>standard</systemChrome>
    <transparent>false</transparent>
    <visible>true</visible>
    <fullScreen>false</fullScreen>
    <aspectRatio>portrait</aspectRatio>
    <renderMode>auto</renderMode>
    <autoOrients>true</autoOrients>
  </initialWindow>

  <icon/>

  <customUpdateUI>false</customUpdateUI>

  <allowBrowserInvocation>false</allowBrowserInvocation>

  <supportedProfiles>mobileDevice extendedMobileDevice</supportedProfiles>

</application>
 

■ステージの自動回転の設定が有効であるか調べる


ステージの自動回転の設定が有効であるかを調べるには、 stage.autoOrients プロパティを取得します。
 
true であれば、自動回転します。このプロパティは読み取り専用です。
 
ステージの自動回転が有効であるか調べる

import flash.text.TextField;

// テキストフィールドを作成
var text_field:TextField = new TextField();
text_field.x = 10;
text_field.y = 10;
text_field.width = stage.stageWidth - 20;
text_field.height = 20;
text_field.border = true;
stage.addChild(text_field);

text_field.text = "ステージの自動回転が有効か?:" + stage.autoOrients;
 

■ステージが回転した瞬間を調べる


「ステージの回転」が動作中であるかを調べるには、StageOrientationEvent.ORIENTATION_CHANGING イベントを使用します。
 
「ステージの回転」が動作完了したかを調べるには、StageOrientationEvent.ORIENTATION_CHANGE イベントを使用します。
 
回転前のステージの向きを調べるには、beforeOrientation プロパティを調べます。
 
回転後のステージの向きを調べるには、afterOrientation プロパティを調べます。
 
StageOrientation.* 定数が得られます。
 
定数文字列説明
StageOrientation.DEFAULT"default"デフォルトの方向
StageOrientation.ROTATED_LEFT"rotatedLeft"デフォルトの方向からステージを時計回りに 90 度回転させた状態
StageOrientation.UPSIDE_DOWN"upsideDown"デフォルトの方向からステージを180 度回転させた状態
StageOrientation.ROTATED_RIGHT"rotatedRight"デフォルトの方向からステージを反時計回りに 90 度回転させた状態
StageOrientation.UNKNOWN"unknown" ステージの方向がまだ確定していない状態
 
ステージの自動回転を監視する

import flash.display.Stage;
import flash.text.TextField;
import flash.events.StageOrientationEvent;

// テキストフィールドを作成
var text_field:TextField = new TextField();
text_field.x = 10;
text_field.y = 10;
text_field.width = stage.stageWidth - 20;
text_field.height = 20;
text_field.border = true;
stage.addChild(text_field);


// ステージの回転をサポートしているか
if(Stage.supportsOrientationChange){

	// 「ステージの回転」が動作中に実行されるイベント
	stage.addEventListener(StageOrientationEvent.ORIENTATION_CHANGING , function (e:StageOrientationEvent):void{
		text_field.text = "ステージの回転が動作中" + " before:" + e.beforeOrientation + " after:" + e.afterOrientation;
	});

	// 「ステージの回転」が動作完了時に実行されるイベント
	stage.addEventListener(StageOrientationEvent.ORIENTATION_CHANGE , function (e:StageOrientationEvent):void{
		text_field.text = "ステージの回転が動作完了" + " before:" + e.beforeOrientation + " after:" + e.afterOrientation;
	});

}
 

■ステージの自動回転を無効化する


「ステージの回転」が動作中であるかを調べるには、StageOrientationEvent.ORIENTATION_CHANGING イベントを使用します。
 
ステージの回転を禁止するには、「このイベントに登録した関数」の引数から得られる、「StageOrientationEvent オブジェクトの preventDefault() メソッド」を呼び出し、デフォルトの動作をキャンセルします。
 
ステージの自動回転をキャンセルする

import flash.display.Stage;
import flash.events.StageOrientationEvent;

// ステージの回転をサポートしているか
if(Stage.supportsOrientationChange){

	// 「ステージの回転」が動作中に実行されるイベント
	stage.addEventListener(StageOrientationEvent.ORIENTATION_CHANGING , function (e:StageOrientationEvent):void{

		// ステージの自動回転が有効である
		if(stage.autoOrients){

			// イベントに割り当てられている「デフォルト動作」をキャンセルする
			e.preventDefault();

		}

	});

}
 
 

 

ステージを手動的に回転する

 
サンプルをダウンロード
 


■デバイスがサポートする方向の一覧を調べる(Adobe AIR 2.6 以降)

 
デバイスがサポートする方向の一覧を調べるには、stage.supportedOrientations プロパティを使用します。
 
得られるデータの型は、Vector.<String> となります。(配列の中身は StageOrientation 定数)
 
デバイスがサポートする方向の一覧を調べる

import flash.text.TextField;
import flash.display.Stage;

// テキストフィールドを作成
var text_field:TextField = new TextField();
text_field.x = 10;
text_field.y = 10;
text_field.width = stage.stageWidth - 20;
text_field.height = 200;
text_field.border = true;
stage.addChild(text_field);

// ステージの回転をサポートしているか
if(Stage.supportsOrientationChange){

	// デバイスがサポートする方向の一覧を取得
	var orientations:Vector.<String> = stage.supportedOrientations;

	// 配列の中身をテキストフィールドに列挙
	var key:String;
	var str:String = "";
	for(key in orientations){
		str += orientations[key] + "\n";
	}
	text_field.text = str;
}
 

■デバイスの現在の物理的な方向を調べる

 
デバイスの現在の物理的な方向を調べるには、stage.deviceOrientation プロパティを使用します。(読み取り専用)
 
StageOrientation.* 定数が得られます。
 
「ステージの自動回転」を無効に設定していてもこの値は更新されます。
 
定数文字列説明
StageOrientation.DEFAULT"default"デフォルトの方向
StageOrientation.ROTATED_LEFT"rotatedLeft"デフォルトの方向からデバイスを時計回りに 90 度回転させた状態
StageOrientation.UPSIDE_DOWN"upsideDown"デフォルトの方向からデバイスを180 度回転させた状態
StageOrientation.ROTATED_RIGHT"rotatedRight"デフォルトの方向からデバイスを反時計回りに 90 度回転させた状態
StageOrientation.UNKNOWN"unknown" デバイスの方向がまだ確定していない状態
 
デバイスの現在の方向を調べる

import flash.text.TextField;
import flash.display.Stage;
import flash.events.Event;

// テキストフィールドを作成
var text_field:TextField = new TextField();
text_field.x = 10;
text_field.y = 10;
text_field.width = stage.stageWidth - 20;
text_field.height = 20;
text_field.border = true;
stage.addChild(text_field);

// ステージの回転をサポートしているか
if(Stage.supportsOrientationChange){

	// 毎フレーム実行されるイベント
	addEventListener(Event.ENTER_FRAME , function (e:Event):void{

		text_field.text = "デバイスの方向:" + stage.deviceOrientation;

	});

}
 

■ステージの現在の方向を調べる

 
ステージの現在の方向を調べるには、stage.orientation プロパティを使用します。(読み取り専用)
 
StageOrientation.* 定数が得られます。
 
定数文字列説明
StageOrientation.DEFAULT"default"デフォルトの方向
StageOrientation.ROTATED_LEFT"rotatedLeft"デフォルトの方向からステージを時計回りに 90 度回転させた状態
StageOrientation.UPSIDE_DOWN"upsideDown"デフォルトの方向からステージを180 度回転させた状態
StageOrientation.ROTATED_RIGHT"rotatedRight"デフォルトの方向からステージを反時計回りに 90 度回転させた状態
StageOrientation.UNKNOWN"unknown" ステージの方向がまだ確定していない状態
 
ステージの現在の方向を調べる

import flash.text.TextField;
import flash.display.Stage;
import flash.events.Event;

// テキストフィールドを作成
var text_field:TextField = new TextField();
text_field.x = 10;
text_field.y = 10;
text_field.width = stage.stageWidth - 20;
text_field.height = 20;
text_field.border = true;
stage.addChild(text_field);

// ステージの回転をサポートしているか
if(Stage.supportsOrientationChange){

	// 毎フレーム実行されるイベント
	addEventListener(Event.ENTER_FRAME , function (e:Event):void{

		text_field.text = "ステージの方向:" + stage.orientation;

	});

}
 

■ステージを回転する

 
ステージを回転するには、setOrientation() メソッドを使用します。
 
引数に、StageOrientation.* 定数をセットします。
 
「デバイスの現在の物理的な方向」から、ステージを回転する例です。
 
「デバイスの現在の物理的な方向」から、ステージを回転する

import flash.display.Stage;
import flash.events.Event;

// ステージの回転をサポートしているか
if(Stage.supportsOrientationChange){

	// 毎フレーム実行されるイベント
	addEventListener(Event.ENTER_FRAME , function (e:Event):void{

		switch(stage.deviceOrientation){
		case StageOrientation.DEFAULT:
			stage.setOrientation( StageOrientation.DEFAULT );
			break;
		case StageOrientation.ROTATED_LEFT:
			stage.setOrientation( StageOrientation.ROTATED_RIGHT );
			break;
		case StageOrientation.UPSIDE_DOWN:
			stage.setOrientation( StageOrientation.UPSIDE_DOWN );
			break;
		case StageOrientation.ROTATED_RIGHT:
			stage.setOrientation( StageOrientation.ROTATED_LEFT );
			break;
		}

	});

}