AS3でオブジェクトをステージ上に相対配置する「RelativeLayout」クラス

ActionScript3.0でオブジェクトをステージ上に相対配置する「RelativeLayout」クラスを作成しました。

ウィンドウ/ステージリサイズ時にクラスを呼び出すことで、オブジェクトを「中央」や「下付き」、「右付き」等に変更できます。オブジェクトの座標やサイズの変更も可能です。

ご使用の際は、ステージの伸縮を「拡大・縮小なし」、ステージの位置を「左上」に設定し、ステージリサイズ時のイベントリスナーを登録する必要があります。

ファイル

使用方法

  • center_mc(MovieClip)をステージの中央に配置
1
RelativeLayout.setPos(stage, center_mc);
  • righttop_mc(MovieClip)をステージの右上に配置
1
RelativeLayout.setPos(stage, righttop_mc, "rt");
  • rightbottom_mc(MovieClip)をステージの右下へ、画面端(下)から24ピクセルの間隔を持って配置
1
RelativeLayout.setPos(stage, rightbottom_mc, "rb", 0, 24);
  • leftbottom_mc(MovieClip)をステージの左下へ、オブジェクトの横幅・縦幅を24ピクセルに強制指定して配置
1
RelativeLayout.setPos(stage, leftbottom_mc, "lb", 0, 0, 24, 24);
  • resize_mc(MovieClip)の横幅をステージの横幅に合わせる
1
RelativeLayout.resize(resize_mc, stage.stageWidth);
  • resize_mc(MovieClip)の横幅・縦幅をステージの横幅・縦幅に合わせる
1
RelativeLayout.resize(resize_mc, stage.stageWidth, stage.stageWidth);
  • point_mc(MovieClip)を、左から50ピクセル、上から100ピクセルの場所へ配置する
1
RelativeLayout.point(point_mc, 50, 100);
  • rect_mc(MovieClip)を、左から50ピクセル、上から100ピクセルの場所へ配置し、サイズを 240*400ピクセルに変更する
1
RelativeLayout.rect(rect_mc, 50, 100, 240, 400);

オブジェクト配置場所

中央 : “center” or “cm”
上  : “top” or “ct”
右  : “right” or “rm”
下  : “bottom” or “cb”
左  : “left” or “lm”
右上 : “righttop” or “rt”
右下 : “rightbottom” or “rb”
左下 : “leftbottom” or “lb”
左上 : “lefttop” or “lt”

ソースコード

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
package net.dolice.gui{
  import flash.display.DisplayObject;
  import flash.display.Stage;
  import flash.geom.Point;
  import flash.geom.Rectangle;
  public class RelativeLayout extends DisplayObject {
      private static var aimX:int;
      private static var aimY:int;
      private static var _x:int;
      private static var _y:int;
      private static var _width:uint;
      private static var _height:uint;
      private static var rectangle:Rectangle;
      public static function setPos(stage:Stage,$scope:DisplayObject,position:String="center",marginX:int=0,marginY:int=0,w:uint=0,h:uint=0):void {
          if ($scope == null) {
              return;
          }
          RelativeLayout.setSize($scope,w,h);
          switch (position) {
              case "center" :
              case "cm" :
                  RelativeLayout.aimX = Math.floor(stage.stageWidth / 2 - RelativeLayout._width / 2) + marginX;
                  RelativeLayout.aimY = Math.floor(stage.stageHeight / 2 - RelativeLayout._height / 2) + marginY;
                  break;
              case "top" :
              case "ct" :
                  RelativeLayout.aimX = Math.floor(stage.stageWidth / 2 - RelativeLayout._width / 2) + marginX;
                  RelativeLayout.aimY = marginY;
                  break;
              case "right" :
              case "rm" :
                  RelativeLayout.aimX = Math.floor(stage.stageWidth - RelativeLayout._width) - marginX;
                  RelativeLayout.aimY = Math.floor(stage.stageHeight / 2 - RelativeLayout._height / 2) + marginY;
                  break;
              case "bottom" :
              case "cb" :
                  RelativeLayout.aimX = Math.floor(stage.stageWidth / 2 - RelativeLayout._width / 2) + marginX;
                  RelativeLayout.aimY = Math.floor(stage.stageHeight - RelativeLayout._height) - marginY;
                  break;
              case "left" :
              case "lm" :
                  RelativeLayout.aimX = marginX;
                  RelativeLayout.aimY = Math.floor(stage.stageHeight / 2 - RelativeLayout._height / 2) + marginY;
                  break;
              case "righttop" :
              case "rt" :
                  RelativeLayout.aimX = Math.floor(stage.stageWidth - RelativeLayout._width) - marginX;
                  RelativeLayout.aimY = marginY;
                  break;
              case "rightbottom" :
              case "rb" :
                  RelativeLayout.aimX = Math.floor(stage.stageWidth - RelativeLayout._width) - marginX;
                  RelativeLayout.aimY = Math.floor(stage.stageHeight - RelativeLayout._height) - marginY;
                  break;
              case "leftbottom" :
              case "lb" :
                  RelativeLayout.aimX = marginX;
                  RelativeLayout.aimY = Math.floor(stage.stageHeight - RelativeLayout._height) - marginY;
                  break;
              case "lefttop" :
              case "lt" :
              default :
                  RelativeLayout.aimX = marginX;
                  RelativeLayout.aimY = marginY;
                  break;
          }
          RelativeLayout.point($scope, RelativeLayout.aimX, RelativeLayout.aimY);
      }
      public static function resize($scope:DisplayObject,w:uint=0,h:uint=0):void {
          if ($scope == null) {
              return;
          }
          RelativeLayout.setSize($scope,w,h);
          $scope.width = RelativeLayout._width;
          $scope.height = RelativeLayout._height;
      }
      public static function point($scope:DisplayObject,posX:int,posY:int):void {
          if ($scope == null) {
              return;
          }
          RelativeLayout.setPoint(posX, posY);
          $scope.x = RelativeLayout._x;
          $scope.y = RelativeLayout._y;
      }
      public static function rect($scope:DisplayObject,posX:int,posY:int,w:uint=0,h:uint=0):void {
          if ($scope == null) {
              return;
          }
          RelativeLayout.setPoint(posX, posY);
          RelativeLayout.setSize($scope,w,h);
          RelativeLayout.rectangle = new Rectangle(
            RelativeLayout._x,RelativeLayout._y,RelativeLayout._width,RelativeLayout._height
          );
          $scope.x = RelativeLayout.rectangle.x;
          $scope.y = RelativeLayout.rectangle.y;
          $scope.width = RelativeLayout.rectangle.width;
          $scope.height = RelativeLayout.rectangle.height;
      }
      private static function setSize($scope:DisplayObject,w:uint, h:uint):void {
          w ? RelativeLayout._width = w:RelativeLayout._width = $scope.width;
          h ? RelativeLayout._height = h:RelativeLayout._height = $scope.height;
      }
      private static function setPoint(posX:int,posY:int):void {
          RelativeLayout._x = posX;
          RelativeLayout._y = posY;
      }
  }
}
   このエントリーをはてなブックマークに追加

About

Masaki Hirokawa (@dolice_apps)

デザインエンジニア 廣川政樹の開発ブログ。Objective-Cや Javaなど iPhone/Androidアプリ開発に関する技術情報を掲載しています。

iPhone apps

  • リラックス・ヒーリング(無料)
  • 望みが叶う!引き寄せの法則アプリ(無料)
  • ミステリー - 怖い話や不思議な体験、都市伝説まとめ
  • 浮世絵壁紙 - 美しい日本画ギャラリー(無料)
  • 綺麗な壁紙HD iPhone 7/7 Plus/SE & iPod対応(無料)
  • クールな壁紙HD iPhone 7/7 Plus/SE & iPod対応(無料)

Android apps

  • 浮世絵壁紙 - 美しい日本画ギャラリー
  • 綺麗な高画質壁紙

Objective-C Classes

Tag Cloud

ActionScript(9) ActionScript3(7) Ad(4) Adfurikun(2) AdMob(9) Android(10) Animation(17) AppDelegate(3) ARC(1) ArrayList(1) AVAudioPlayer(4) AVAudioSession(1) AVFoundation(3) Banner(2) Bitmap(1) Camera(4) CGAffineTransform(4) CGBlendMode(2) CGContextRef(1) CGImageRef(1) Classes(44) CLLocationManager(1) ConnectivityManager(1) ContentResolver(1) CoreLocation(2) Delegate(3) Device(7) Display(1) DisplayMetrics(1) Download(101) Facebook(6) Foundation(72) Framework(2) Google Analytics(1) Handler(1) iAd(6) ImageView(1) In-AppPurchase(1) iOS(12) iOS 7(15) iOS 7.1(3) iOS 8(1) iPad(7) iPhone(21) iPhone 6(4) Java(7) JavaScript(2) LINE(4) Localize(1) Magazine(1) MediaStore(1) MFComposeViewController(1) Nend(1) NetworkInfo(1) NSArray(23) NSCalendar(3) NSData(2) NSDate(7) NSDateComponents(2) NSDateFormatter(2) NSDictionary(12) NSEnumerator(1) NSIndexSet(1) NSInteger(6) NSMutableArray(17) NSMutableDictionary(5) NSMutableOrderedSet(7) NSMutableString(4) NSMutableURLRequest(1) NSNotificationCenter(1) NSNumber(1) NSObject(1) NSOrderedSet(7) NSRange(2) NSSelectorFromString(1) NSSet(6) NSString(19) NSTimer(4) NSTimeZone(1) NSURL(7) NSURLConnection(1) NSURLRequest(2) NSUserDefaults(7) NSXMLParser(2) Objective-C(222) PHP(1) Products(14) QuartzCore(3) RSS(2) Runnable(1) Sample(51) Screensaver(9) SDK(2) ShareCompat(1) Social(10) StoreKit(1) Twitter(6) UIAccelerometer(3) UIActionSheet(1) UIActivityIndicator(1) UIActivityIndicatorView(3) UIActivityViewController(1) UIAlertView(5) UIApplication(7) UIButton(4) UIColor(3) UIDatePicker(5) UIDevice(6) UIDeviceOrientation(1) UIEvent(6) UIImage(15) UIImagePickerController(4) UIImageView(12) UIKit(58) UILabel(7) UINavigationBar(4) UINavigationItem(1) UIPasteboard(4) UIScreen(1) UIScrollBar(1) UIScrollView(1) UISlider(3) UIStoryboardSegue(3) UISwitch(1) UITabBar(3) UITableView(4) UITextField(2) UIView(11) UIViewAnimationTransition(1) UIViewController(4) UIWebView(5) WindowManager(1) Xcode(48) Xcode 5(8) Xcode 5.1(2)