2007年08月01日
AS3 で iPhone 風ボタンを描画

ActionScript 3 で Photoshop チュートリアル実践シリーズ 第1弾。
今回は iPhone 風ボタンを作ってみました。
参考にしたサイトは iPhone style icon tutorial ≪ Jotlet Developer Blog。Photoshop 用のチュートリアルとはいえ、使っている機能は、角丸四角、ドロップシャドウ、楕円、グラデーション、オーバーレイ(レイヤースタイル)程度だったので、ほとんど苦労なく AS3 に移植できました。
完成品が上の画像。文字はあとから Photoshop を使って追加しましたが、それ以外のところは正真正銘、AS3 だけで描画しています。
ソースは以下の通り。
package
{
import flash.display.*;
import flash.filters.*;
import flash.geom.*;
public class iPhoneButton extends Sprite
{
private const color:int = 0x1960CA;
private const SIZE:int = 60;
private const ROUND:int = 20;
public function iPhoneButton():void
{
var matrix:Matrix = new Matrix();
matrix.createGradientBox(SIZE, SIZE, Math.PI / 2);
var base:Shape = new Shape();
base.graphics.beginFill(color);
base.graphics.drawRoundRect(0, 0, SIZE, SIZE, ROUND, ROUND);
addChild(base);
var border:Shape = new Shape();
border.graphics.lineStyle(1, 0xffffff, 1);
border.graphics.lineGradientStyle("linear", [0xffffff, 0xffffff, 0xffffff], [1, 0.3, 1], [0, 128, 255], matrix);
border.graphics.drawRoundRect(1, 1, SIZE - 2, SIZE - 2, ROUND, ROUND);
border.blendMode = BlendMode.OVERLAY;
addChild(border);
var glowTop:Shape = new Shape();
glowTop.graphics.beginGradientFill("linear", [0xffffff, 0xffffff], [1, 0.2], [0, 128], matrix);
glowTop.graphics.drawEllipse(-SIZE / 2, -SIZE / 2, SIZE * 2, SIZE);
glowTop.blendMode = BlendMode.OVERLAY;
addChild(glowTop);
var mask:Shape = new Shape();
mask.graphics.beginFill(0);
mask.graphics.drawRoundRect(0, 0, SIZE, SIZE, ROUND, ROUND);
addChild(mask);
glowTop.mask = mask;
var glowBottom:Shape = new Shape();
glowBottom.graphics.beginGradientFill("linear", [0xffffff, 0xffffff], [0, 1], [224, 255], matrix);
glowBottom.graphics.drawRoundRect(0, 0, SIZE, SIZE, ROUND, ROUND);
glowBottom.blendMode = BlendMode.OVERLAY;
addChild(glowBottom);
var filter:DropShadowFilter = new DropShadowFilter(2, 90, 0x000000, 0.7);
base.filters = [filter];
}
}
}
(2007.08.07 追記)
- b:id:trickstar_os さんのコメントを受けて、Shape を使うようにしました。
- glowTop がはみ出ていたので、マスクで隠すようにしました。