Alexa Vector Graphics形式
Alexa Vector Graphics(AVG)形式でAPLドキュメントのベクターグラフィックを定義します。AVGはScalable Vector Graphics(SVG)のパラメーター化されたサブセットであり、SVGを選択するとグラフィックを複数のオペレーティングシステムに移植できます。AVGで定義されたグラフィックは、VectorGraphic
コンポーネントを使用して表示できます。VectorGraphic
コンポーネントでは、APLパッケージ、APLドキュメント、URLのいずれかからAVGオブジェクトを読み込むことができます。
AVGオブジェクトプロパティ
以下の表は、AVGオブジェクトのプロパティを示しています。
プロパティ | 型 | デフォルト | 説明 |
---|---|---|---|
data |
配列 | なし | 子項目にバインドするデータです。 |
description |
文字列 | "" | このベクターグラフィックの任意の説明です。 |
height |
正の絶対ディメンション | 必須 | グラフィックの高さです。 |
item 、items |
AVG項目の配列 | [] | 描画項目の配列です。各項目は、グループ、パス、またはテキストです。 |
lang |
文字列 | none | ベクターフラフィックに指定された言語。 |
layoutDirection |
次のいずれかになります: LTR | RTL |
LTR |
グラフィックがレンダリングされる方向です。このプロパティは、左から右、または右から左に記述する言語に設定します。 |
parameters |
AVGパラメーターの配列 | [] | AVGオブジェクトに設定できるパラメーター値の配列です。 |
resources |
RESOURCES | [] | ローカルグラフィック固有のリソースです。 |
scaleTypeHeight |
none | grow | shrink | stretch | none | グラフィックの高さに応じて、viewportの高さがどのように変化するかを指定します。 |
scaleTypeWidth |
none | grow | shrink | stretch | none | グラフィックの幅に応じて、viewportの幅がどのように変化するかを指定します。 |
styles |
STYLES | {} | ローカルグラフィック固有のスタイルです。 |
type |
"AVG" | 必須 | ベクターグラフィックの種類です。 |
version |
1.2 | 必須 | AVG規格の現在のリリースバージョンです。 |
viewportHeight |
正の数値 | <height> | viewportの高さです。 |
viewportWidth |
正の数値 | <width> | viewportの幅です。 |
width |
正の絶対ディメンション | 必須 | グラフィックの幅です。 |
次の例は、赤で塗りつぶしたひし形のグラフィックを定義します。
{
"type": "AVG",
"version": "1.2",
"height": 100,
"width": 100,
"items": {
"type": "path",
"fill": "red",
"stroke": "blue",
"strokeWidth": 4,
"pathData": "M 50 0 L 100 50 L 50 100 L 0 50 z"
}
}
グラフィックを表示するには、ドキュメントにVectorGraphic
コンポーネントを配置します。次の例では、ドキュメントのgraphics
プロパティに赤いひし形のグラフィックを追加し、Container
の中央にVectorGraphic
コンポーネントを表示します。
data
任意のデータ配列です。データ配列を指定すると、グラフィックはデータ配列の要素ごとに、items
配列から1つの項目をインフレートします。データバインディングコンテキストには、data
プロパティ、index
プロパティ、length
プロパティが追加されます。
高さ
AVGオブジェクトのデフォルトの高さ(絶対サイズ)です。AVGオブジェクトは、オーバーライドまたはサイズ調整されない限り、この高さで画面上に表示されます。これは絶対ディメンションでなければなりません。
item, items
AVG項目の配列です。配列は描画順です。後の項目が前の項目の上に描画されます。AVG項目にはtype
プロパティがあり、次のいずれかを示します。
when
プロパティがtrueになるitem
がインフレートされます。各項目のデータバインディングコンテキストには、index
プロパティとlength
プロパティが追加されます。これが、「子項目の単純な配列」のインフレーションアルゴリズムです。
data
プロパティに値が含まれる場合は、インフレーションアルゴリズムが変わります。data
配列の項目ごとに、items
配列から、when
プロパティがtrueになる最初の子項目がインフレートされます。データバインディングコンテキストには、data
プロパティ、index
プロパティ、length
プロパティが追加されます。これが、「データ配列」のインフレーションアルゴリズムです。
lang
AVG全体の言語を設定します。設定すると、APLは、グラフィック内のすべてのAVGテキスト項目に対して
fontFamily
の言語固有のバージョンを探します。有効なフォントが見つからない場合、APLはこのプロパティを無視し、指定されたfontFamily
を使用します。設定しない場合、APLは指定のfontFamily
を使用します。
lang
プロパティにはBCP-47文字列("ja-JP"など)を設定します。
注: Alexaデバイスには特定の言語のフォントがインストールされていない場合があります。さまざまなデバイスで正常に動作するかどうかエクスペリエンスをテストしてください。
layoutDirection
AVG全体のレイアウト方向を設定します。設定しない場合、デフォルトはLTR
(左から右)になります。layoutDirection
は、グラフィック内のAVG Text
項目に対してtextAnchor
プロパティがどのように機能するかを決定します。
このプロパティは、AVG全体のlayoutDirectionを指定します。注:AVG全体のlayoutDirection
はドキュメントから継承されません。layoutDirection
を指定しない場合、デフォルト値は「LTR」になります。
resources
AVGリソースを参照してください。
parameters
AVGデータを評価する際にデータバインディングコンテキストに追加する、名前付きの値の配列です。各パラメーターは、以下の表のプロパティを持つオブジェクトです。
プロパティ | 型 | 必須 | 説明 |
---|---|---|---|
name |
文字列 | ◯ | パラメーターの名前です。 |
description |
文字列 | × | パラメーターの任意の説明です。 |
type |
any | string | number | color | × | パラメーターの型です。デフォルトは「any」です。 |
default |
any | × | パラメーターに代入するデフォルト値です。デフォルトは、type が指定されていない場合は空の文字列、指定されている場合は型に応じた空の値です。 |
次のAPLドキュメントでは、color
とstroke
の幅を指定するパラメーターを追加して、円形のベクターグラフィックを定義します。このドキュメントのContainer
は、異なるパラメーター設定を使用してグラフィックを3回インフレートします。
名前付きパラメーターが名前しか持たない場合は、便宜上、単一の文字列に短縮して表記できます。
VectorGraphic
コンポーネントを使用してグラフィックを配置するときは、グラフィックパラメーターをコンポーネント自体のプロパティとして渡すことができます。このため、コンポーネントのもともとのプロパティと競合しないように、AVGパラメーターには大文字を使用してください。たとえば、circleColor
ではなくCircleColor
またはCIRCLE_COLOR
を使用します。ユーザー定義のパラメーターに加えて、height
とwidth
という2つのnumber
パラメーターが暗黙的に指定されます。これらはviewportWidth
とviewportHeight
が調整された値です。たとえば、高さがstartingPixelHeight
のベクターグラフィックがコンテナーに配置されていて、新しいサイズであるscaledPixelHeight
にスケーリングするように指示されたとします。この場合、内部でバインドされるheight
とwidth
の値は次の式で取得されます。
function calculateScale( double scale, ScaleType scaleType ) {
switch (scaleType) {
case "none":
return 1.0;
case "grow":
return scale > 1.0 ? scale : 1.0;
case "shrink":
return scale < 1.0 ? scale : 1.0;
case "stretch":
return scale;
}
}
height = viewportHeight * calculateScale( scaledPixelHeight / startingPixelHeight, scaleTypeHeight );
width = viewportWidth * calculateScale( scaledPixelWidth / startingPixelWidth, scaleTypeWidth );
scaleTypeHeightとscaleTypeWidth
scaleTypeHeight
プロパティとscaleTypeWidth
プロパティは、サイズ調整時にグラフィックの内部(Viewport)の高さと幅をどのように変更するかを制御します。以下の表に有効なオプションを示します。
スケールタイプ | 説明 |
---|---|
|
Viewportのディメンションは変更されません(デフォルト)。 |
|
viewportのディメンションは、描画ディメンションの変更に比例して拡大または縮小します。 |
|
Viewportのディメンションは、描画ディメンションの変更に比例して拡大しますが、縮小はしません。 |
|
Viewportのディメンションは、描画ディメンションの変更に比例して縮小しますが、拡大はしません。 |
例として、縦型のスクロールバーやインジケーターのような「錠剤型」のベクターグラフィックについて考えます。グラフィックのデザインは、上部と下部に丸みのある角を持つ縦長の長方形(塗りつぶしなし)です。ベクターグラフィックの縦方向の拡大縮小に応じて、丸みのある角の形状を維持しながら、中央の縦線を拡大縮小します。このグラフィックを定義する1つのアプローチとして、Viewportを垂直方向に伸縮できるようにし、描画パスに、Viewportの高さに応じてパスの垂直セグメントを描画するパラメーター化された式を挿入する方法があります。次に例を示します。
この例では、左側の画像はViewportを伸縮できない場合の結果を示し、右側の画像はViewportが拡大された場合の結果を示しています。左側の画像では、viewportは100×100単位のviewportで描画され、画面上の100×200 dpの長方形に合うように拡大縮小されます。結果として、歪んだ円が作成されます。右側では、viewportのサイズ調整が拡大縮小に設定されているため、グラフィックは100×200単位のviewportで描画されます。コンテキスト内のheight
プロパティは拡大されたViewportの高さにバインドされるため、pathData
は、長さ${height - 100}
(つまり100)単位の追加の垂直セグメントを含めて描画されます。
styles
AVGスタイルを参照してください。
type
AVG
という文字列に設定されます。
version
このベクターグラフィックで使用するAVG規格のバージョンに設定する文字列です。
AVGの最新バージョンは1.2です。
AVG 1.2は、APL 1.5以降のバージョンでサポートされます。
viewportHeight
AVGオブジェクトの内部で使用される描画座標の高さです。指定しない場合、デフォルトはheight
になります。
viewportWidth
AVGオブジェクトの内部で使用される描画座標の幅です。指定しない場合、デフォルトはwidth
になります。
width
AVGオブジェクトのデフォルトの幅ディメンションです。AVGオブジェクトは、オーバーライドまたはサイズ調整されない限り、このスペース幅で画面上に表示されます。これは絶対ディメンションでなければなりません。
AVGリソース
AVGグラフィックリソースとは、データバインディングと値の解決によりアクセスできる名前付きエンティティです。AVGリソースの構造は、APL Resourcesと同じです。AVGリソースは、グラフィックが読み込まれるときに評価されます。使用されるデータバインディングのコンテキストは、ドキュメントレベルのリソースが読み込まれるグローバルドキュメントのデータバインディングコンテキストです。リソースは静的であり、変更できません。グラフィックリソースでは、@name
構文を使用してドキュメントレベルのリソースを参照できます。
グラフィックリソースブロックのサンプル:
"resources": [
{
"color": {
"accent": "#00CAFF",
"myBlue": "#66DFFF",
},
"number": {
"lineWidth": 2
},
"string": {
"checkmark": "M0,20 l10,10 l40,-40"
},
"pattern": {
"redCircle": {
"width": "18",
"height": "18",
"item": {
"type": "path",
"pathData": "M0,9 a9,9 0 1 1 18,0 a9,9 0 1 1 -18,0",
"fill: "red"
}
}
}
},
{
"when": "${viewport.width > 1000}",
"number": {
"lineWidth": 4
}
},
{
"when": "${viewport.theme == 'light'}",
"color": {
"accent": "#0070BA",
"myBlue": "@documentDarkBlue"
}
}
]
リソースはブロックで定義します。各ブロックは、オプションのwhen句と、型のセットを含むオブジェクトです。リソースの各ブロックのプロパティは以下のとおりです。
プロパティ | 型 | 必須 | 説明 |
---|---|---|---|
|
ブール値のマップ |
× |
ブールの名前をブール値にマッピングします。 |
|
色のマップ |
× |
色の名前を色の値にマッピングします。 |
|
文字列 |
× |
リソースのブロックの説明です。 |
|
イージング関数のマップ |
× |
イージングの名前をイージングの定義にマッピングします。 |
|
グラデーションのマップ |
× |
グラデーション名をグラデーション定義にマッピングします。 |
|
数値のマップ |
× |
名前を数値にマッピングします。 |
|
パターンのマップ |
× |
名前をパターンにマッピングします。 |
|
文字列の配列 |
× |
名前を文字列にマッピングします。 |
|
ブール値 |
× |
|
リソースブロックは配列順に処理され、前の定義は後の定義で上書きされます。
リソースの定義では、@name
構文を使用することで、前のブロックで定義されているリソースを参照できます。
boolean
ブール型リソースは、trueまたはfalseの値です。ブール型以外をブール型リソースに割り当てると、「truthy」ルールによって変換されます。ルールの詳細については、Truthyと強制を参照してください。次に例を示します。
"boolean": {
"a": true, // True
"b": null, // False
"c": "" // False
"d": 22 // True
}
color
色値は、32ビットのRGBA値の色として格納されています。色に変換される文字列式の記述方法については、データ型を参照してください。一般的な強制ルールについては、色の強制を参照してください。
"colors": {
"myRed1": "#ff0000ff", // 通常の赤
"myRed2": "#ff0000", // 短縮バージョン(透明度を省略)
"myRed3": "#f00", // 超短縮バージョン(R、G、Bの2桁分を1桁で表現)
"myRed4": "red", // ビルトインの色名を使用
"myRed5": "rgb(255,0,0)", // RGB関数
“myRed6”: 4278190335 // 非推奨:0xff0000ffの16進数
}
easing
イージング関数は、アニメーション化されたプロパティの時間経過による変化を定義するために従来から使用されてきた一価関数です。イージング関数の詳細については、イージング関数を参照してください。
gradient
グラデーションは、AVGグラデーションセクションのルールに従って定義されます。次に例を示します。
"gradient": {
"redWhite": {
"type": "linear",
"colorRange": [ "@myRed1", "white"],
"inputRange": [ 0, 1 ],
"angle": 90
}
}
number
数値リソースは、内部的に倍精度浮動小数点数値として格納されます。数値以外の値が数値に変換される方法については、数値の強制を参照してください。
"numbers": {
"a": 23,
"b": "${viewport.width / viewport.height}"
}
pattern
パターンリソースは、パスの塗りつぶしやストロークに使用するAVGグラフィックオブジェクトです。次に例を示します。
"pattern": {
"CirclePattern": {
"description": "円の繰り返しパターン",
"viewportWidth": 20,
"viewportHeight": 20,
"width": "25%",
"height": "25%"
"items": {
"type": "path",
"fill": "red",
"pathData": "M0,10 a10,10 0 1 1 20,0 a10,10 0 1 1 -20,0"
}
}
}
詳細についてはAVGパターンを参照してください。
string
文字列値は文字列として格納されます。その他の型は文字列に変換されます。文字列変換ルールについては、文字列の強制を参照してください。
"strings": {
"a": null, // ""
"b": "", // ""
"c": false, // "false"
"d": 23, // "23"
"e": "${@myRed1}" // "#ff0000ff" (上記の色の定義による)
}
when
when
がtrue
または未指定の場合、このリソースブロックは処理され、定義されたAVGリソースに追加されます。when
がfalseの場合、リソースブロックはスキップされます。
AVGグラデーション
グラデーションとは、塗りつぶしやストロークに使用する陰影の付いた色のことです。AVGは、線形と放射のグラデーションをサポートしています。リソースで指定するAVGグラデーションは一定で、実行時に変更されません。fill
プロパティまたはstroke
プロパティで直接指定するAVGグラデーションは動的にすることもできます(内部データバインディングプロパティと共に使用した場合)。
次の例は、線形と放射のグラデーションを含むAVGグラフィックを示しています。
{
"type": "AVG",
"version": "1.2",
"width": 358,
"height": 150,
"resources": {
"gradients": {
"linearGradient": {
"inputRange": [
0,
0.5492504222972973,
1
],
"colorRange": [
"#ffffffff",
"#ff0000ff",
"#000000ff"
],
"type": "linear",
"x1": 0.30127709565476446,
"y1": 0.4259174391256225,
"x2": 0.7981258206624885,
"y2": 0.5839892388973439
},
"radialGradient": {
"inputRange": [
0,
1
],
"colorRange": [
"#ffffffff",
"#ff0000ff"
],
"type": "radial",
"centerX": 0.6480013075429227,
"centerY": 0.4348329629565578,
"radius": 1
}
}
},
"items": [
{
"type": "path",
"description": "線形の星",
"fill": "@linearGradient",
"stroke": "#979797ff",
"strokeWidth": 1,
"pathData": "M86.5,120 L38.5955019,144.103326 L47.744447,93.0516628 L8.98889392,56.8966744 L62.547751,49.4483372 L86.5,3 L110.452249,49.4483372 L164.011106,56.8966744 L125.255553,93.0516628 L134.404498,144.103326 L86.5,120 Z"
},
{
"type": "path",
"description": "放射状の星",
"fill": "@radialGradient",
"fillTransform": "translate(0.648001,0.434833) matrix(-0.348987 0.320740 -0.306966 -0.364646 0 0) translate(-0.648001,-0.434833)",
"stroke": "#979797ff",
"strokeWidth": 1,
"pathData": "M261.5,120 L213.595502,144.103326 L222.744447,93.0516628 L183.988894,56.8966744 L237.547751,49.4483372 L261.5,3 L285.452249,49.4483372 L339.011106,56.8966744 L300.255553,93.0516628 L309.404498,144.103326 L261.5,120 Z"
}
]
}
次のAPLドキュメントでは、このグラフィックにgradientStars
という名前を付け、Viewportの中央にグラフィックを表示します。
AVGグラデーションはSVGグラデーション標準のサブセットであり、コンポーネントに使用されるグラデーション定義とは異なります。AVGドキュメントでコンポーネントグラデーションを使用することもできますが、この方法は推奨されません。コンポーネントグラデーションでは、拡大縮小が同じように行われるとは限らず、機能も少ないためです。AVG定義にはAVGグラデーションが推奨されます。
共通プロパティ
すべてのAVGグラデーションには、次の表に示すプロパティがあります。
プロパティ | 型 | デフォルト | 説明 |
---|---|---|---|
|
|
必須 |
グラデーションの種類です。 |
|
色の配列 |
必須 |
各グラデーションの終了点に指定される色です。 |
|
文字列 |
— |
このグラデーションの任意の説明です。 |
|
数値の配列 |
— |
入力のグラデーションの終了点です。 |
|
: |
|
位置の座標系です。 |
AVGグラデーションには次の2種類があります。
type
グラデーションにはtype
を定義する必要があり、"linear"または"radial"に設定する必要があります。
colorRange
各グラデーションの終了点に指定される色です。色は終了点の間で線形補間されます。
inputRange
inputRange
は、グラデーションの終了点の位置を指定します。inputRange
を指定しない場合、最初の色の値がグラデーション終了点0、最後の色の値がグラデーション終了点1となり、その他は0~1の間で均等に分散されます。
指定する場合、inputRangeは(a)colorRangeと同じ数の要素を持ち、(b)[0,1]の範囲の数値が昇順で並んでいる必要があります。最初の値が0より大きい場合、0と最初の色値の間の色範囲は、最初の色値に固定されます。最後の値が1より小さい場合、最後の値と1の間の色範囲は、最後の色値に固定されます。
units
グラデーション位置の座標系を定義します。userSpace
座標系は、オブジェクトが描画される座標系に基づいてグラデーションの位置ディメンションを解釈します。これは、SVGのuserSpaceOnUse
設定と同じです。boundingBox
座標系は、(0,0)の値をパスのバウンディングボックス左上にマッピングし、(1,1)の値をパスのバウンディングボックス右下にマッピングして、グラデーションの位置ディメンションを解釈します。boundingBox
値は、SVGのobjectBoundingBox
設定と同じです。
Linear
線形グラデーションには共通プロパティのほかにも、次のプロパティがあります。
プロパティ | 型 | デフォルト | 説明 |
---|---|---|---|
|
|
|
定義された範囲外でのグラデーション動作です。 |
|
数値 |
|
グラデーションの開始点のx位置です。 |
|
数値 |
|
グラデーションの終了点のx位置です。 |
|
数値 |
|
グラデーションの開始点のy位置です。 |
|
数値 |
|
グラデーションの終了点のy位置です。 |
線形グラデーションの場合、spreadMethod
は"pad"に設定され、angle
が正しくなるようにx1
、x2
、y1
、y2
の値が計算されます。これにより、単位正方形の定義に従って、最初と最後の色がオブジェクトのバウンディング矩形の対角に設定されます。
spreadMethod
線形グラデーションのspreadMethodは、(x1,y1)から(x2,y2)として定義されるボックスの範囲外でグラデーションがどのように繰り返されるかを定義します。
x1/y1/x2/y2
これらの点は、グラデーションボックスの開始点および終了点を定義します。colorRangeの最初の色は、(x1,y1)に描画されます。colorRangeの最後の色は、(x2, y2)に描画されます。色は、色と入力範囲のルールに従って、これら2つの点の間で線形補間されます。
グラデーションに使用される座標系は、units
プロパティによって定義されます。units
プロパティがboundingBox
の場合、これらの値は、オブジェクトの周りをストロークまたは塗りつぶしで囲むバウンディング矩形の割合となります。同じグラデーションでも、異なるアスペクト比の図形で使用すると異なる視角で表示されることに注意が必要です。fillTransform
とstrokeTransform
を使用すると、視角を補正できます。
Radial
放射グラデーションには共通プロパティのほかにも、次のプロパティがあります。
プロパティ | 型 | デフォルト | 説明 |
---|---|---|---|
|
数値 |
|
グラデーションの中心のx位置です。 |
|
数値 |
|
グラデーションの中心のy位置です。 |
|
正の数値 |
|
グラデーションの半径(終端までの距離)です。 |
放射グラデーションの場合、centerX
とcenterY
の値は50%
に固定され、radius
の値は70.71%
に固定されます。これにより、最初の色はオブジェクトの中心に、最後の色はオブジェクトのバウンディング矩形の隅に設定されます。
centerX/centerY
この点により、放射グラデーションの中心を定義します。この点は、units
プロパティがboundingBox
の場合はオブジェクトの周りを塗りつぶしまたはストロークで描画するバウンディング矩形の割合で定義され、userSpace
の場合はローカル座標で定義されます。
radius
グラデーションの半径は、オブジェクトの周りを塗りつぶしまたはストロークで描画するバウンディング矩形の幅/高さの割合で定義されます。boundingBox
単位を使用して正方形以外のオブジェクトで描画される放射グラデーションは、オブジェクトのアスペクト比を補間するグラデーション変換を適用しない限り、楕円として表示されます。fillTransform
とstrokeTransform
を使用すると、視角を補正できます。
AVGフィルター
AVGフィルターは、AVG項目によって生成されたグラフィックに対して、その項目が表示される前に効果を適用します。
次のドキュメントでは、redDiamondWithFilters
というグラフィックを定義し、そのグラフィックにDropShadow
フィルターを使用してドロップシャドウを追加します。この例では、黒い影を確認できるように、中程度のグレーの背景を使用しています。
フィルターには、適用するフィルターのタイプを指定するtype
プロパティがあります。フィルターは定義順に適用されます。
配列内の最初のフィルターは、親AVG項目(複数可)から描画されるグラフィックを入力として受け取ります。配列内の後続の各フィルターは、前のフィルターの出力結果を入力として受け取ります。そして配列内の最後のフィルターの出力が表示されます。
次の表のフィルターを使用できます。
型 | 説明 |
---|---|
|
ソース画像にドロップシャドウを追加します。 |
DropShadow
DropShadow
フィルターは、入力グラフィックをコピーし、指定されたシャドウの色でRGB値を置き換えます。ソースグラフィックのアルファチャンネルと影の色が積算されて、シャドウアルファの値が決まります。これによりシャドウグラフィックがぼかされ、指定されたオフセットにより変換されて、元の入力グラフィックの背後にコピーされます。オフセットとぼかしの半径の値は、AVG座標で解釈されます。
プロパティ | 型 | デフォルト | 説明 |
---|---|---|---|
|
|
必須 |
|
|
色 |
Black |
影の色です。 |
|
数値 |
0 |
影の水平方向のオフセットです。 |
|
負ではない数値 |
0 |
影のぼかしの半径です。 |
|
数値 |
0 |
影の垂直方向のオフセットです。 |
生成される影は、AVGオブジェクトのディメンションによってバインドされます。DropShadow
フィルターは、すべてのAVG項目と、前に描画されたすべてのAVG項目のフィルター結果の背後に影を描画します。
AVGパターン
AVGパターンは、パラメーター化されていない再利用可能なベクターグラフィック要素です。パスのstroke
プロパティとfill
プロパティに適用できます。AVGパターンは、次の表に示すプロパティを持つオブジェクトです。
プロパティ | 型 | デフォルト | 説明 |
---|---|---|---|
|
文字列 |
— |
このパターンの説明です(任意)。 |
|
正の数値 |
必須 |
パターンの高さです。 |
|
AVG項目の配列 |
— |
描画項目の配列です。 |
|
正の数値 |
必須 |
パターンの幅です。 |
AVGパターンは、AVG pattern
リソースで定義する必要があります。AVGパターン内の描画操作は、0,0から、width、heightまでのボックスの描画に適用されます。このバウンディングボックス外の描画操作は切り取られます。
AVGパターンは内部的に、オフスクリーンビットマップに1回レンダリングされた後、path
要素またはtext
要素を描画するときにビットマップシェーダーとして使用される可能性があります。レンダリング中にパターンが拡大されると、ピクセル化アーティファクトが表示されることがあります。パターンはできるだけ小さく保ち、拡大することは避けてください。
height
パターンの高さを、描画先のパスに応じた座標で表します。幅と高さはどちらも正の数値にする必要があります。そうでない場合、パターンは描画されません。
item, items
AVG項目の配列です。配列は描画順であるため、後の項目が前の項目の上に表示されます。次のような描画項目がすべてサポートされます。
width
パターンの幅を、描画先のパスに応じた座標で表します。幅と高さはどちらも正の数値にする必要があります。そうでない場合、パターンは描画されません。
AVGスタイル
AVG stylesは、単一のベクターグラフィック内にのみ適用されるAPL Stylesです。すべてのAVGプロパティにはスタイルを適用できます。APL Stylesの詳細については、APLスタイルの定義と評価を参照してください。
AVGスタイルの定義では、スタイルの名前、継承元となる1つまたは複数の親スタイルのリスト、条件付きで適用されるプロパティ定義の順序付きリストを指定します。
"styles": {
"BasicButton: {
"values": [
{
"strokeWidth": 5,
"stroke": "red",
"fill": "@StandardFillResource"
},
{
"when": "${state.focused}",
"stroke": "green",
},
{
"when": "${state.pressed}",
"stroke": "blue"
}
]
},
"FancyButton": {
"extends": "BasicButton",
"values": [
{
"when": "${state.pressed}",
"stroke": "@FancyButtonGradient"
}
]
}
}
各スタイル定義には、次の表に示すプロパティがあります。
プロパティ | 型 | デフォルト | 説明 |
---|---|---|---|
|
文字列 |
— |
このスタイルの説明です。 |
|
スタイル名の配列 |
[] |
このスタイルの継承元となるスタイルを一覧にしたものです。順序が重要です。後のスタイルが前のスタイルをオーバーライドします。 |
|
valueオブジェクトの配列 |
[] |
オブジェクトの配列です。 |
extend, extends
extends
配列には、このスタイルの継承元となるスタイル名の順序付きリストが含まれます。これらのスタイルは、ローカル定義のAVGスタイルまたはグローバルのAPLスタイルです。extends
配列で参照されている2つのスタイルが同じプロパティを定義する場合、リスト内で後にあるスタイルがプロパティ定義をオーバーライドします。
values, values
values
配列には、適用するvalueオブジェクトの順序付きリストが含まれます。各valueオブジェクトは、次の形式になります。
{
"when": EXPRESSION,
NAME: VALUE,
NAME: VALUE,
:
}
when
プロパティはオプションであり、設定されていない場合のデフォルト値はtrueです。定義されたプロパティは、有効なスタイル設定可能プロパティの名前であると見なされます。無効な名前は無視されます。when
句のデータバインディングコンテキストには、グラフィック、ドキュメント、インポートされたパッケージのいずれかで以前に使用されたViewport、環境、リソース定義、スタイルが含まれます。
AVG基本項目
AVG基本項目は、一般的なAVG項目プロパティを指定する抽象クラスです。AVG項目の具体的な種類としては、次の3つがあります。
すべてのAVG項目は、次の表にあるプロパティをサポートします。
プロパティ | 型 | デフォルト | 説明 |
---|---|---|---|
|
バインドの配列 |
[] |
データに追加する式です。 |
|
文字列 |
— |
(オプション)AVG項目の説明です。 |
|
AVGフィルターの配列 |
[] |
この項目に適用するフィルターです。 |
|
文字列 |
— |
適用する名前付きスタイルです。 |
|
|
必須 |
AVG項目の種類です。 |
|
ブール値 |
|
|
bind
AVGのbind
プロパティは、項目およびその子のデータバインディングコンテキストをローカルのバインド変数で拡張します。バインド変数の詳細については、APLバインド変数を参照してください。
filter、filters
このグループ内のすべての項目の描画に適用される1つ以上のフィルター操作です。フィルターは、項目が表示される前に適用されます。グループフィルターは、グループのすべての項目が描画され、フィルターが適用された後に適用されます。フィルターの詳細については、AVGフィルターを参照してください。
style
この項目に適用する名前付きAVGスタイルです。詳細については、AVGスタイルを参照してください。
type
インフレートする特定の項目の種類を指定します。次のいずれかになります。
type
プロパティは必須です。
when
true
の場合、AVG項目をインフレートします。false
の場合、AVG項目とその子項目をすべて無視します。
AVGパス項目
AVGパス項目では、通常の塗りつぶしと線で表示される形状を1つ以上定義します。AVGパス項目には以下のプロパティがあります。
- すべてのAVG基本項目プロパティ
- 次の表に挙げたパス項目プロパティ
プロパティ | 型 | デフォルト | 説明 | |
---|---|---|---|---|
|
"path" |
必須 |
「path」に設定する必要があります。 | |
|
色 |
transparent |
塗りつぶしの色です。 | |
|
数値 |
1 |
パスの塗りつぶしの不透明度です。 | |
|
変換 |
— |
変換は、塗りつぶしグラデーションまたはパターンに対して適用されます。 | |
|
文字列 |
必須 |
パスの描画データです。 | |
|
負ではない数値 |
0 |
定義する場合、パスの「長さ」を指定します。 | |
|
色 |
transparent |
線の描画に使用する色です。 | |
|
長さの配列 |
[] |
破線と空白のパターンです。 | |
|
長さ |
0 |
破線配列パターンへのオフセットです。 | |
|
|
butt |
開いたパスの終端に使用される図形です。 | |
|
|
miter |
パスの角の描画方法です。 | |
|
正の数値 |
4 |
図形パスの角が面取りされる場合です。 | |
|
数値 |
1 |
| |
|
変換 |
— |
変換は、ストロークグラデーションまたはパターンに対して適用されます。 | |
|
数値 |
1 |
|
少なくとも、fill
またはstroke
を指定する必要があります。fill
とstroke
のどちらも指定されていない場合、グラフィックは描画されません。
fill
パスを塗りつぶすために使用する色、グラデーション、またはパターンです。指定しない場合、塗りつぶしは行われません。
以下は、グラデーションを使って塗りつぶした正方形を作成する例です。
{
"gradientSquare": {
"type": "AVG",
"version": "1.2",
"height": 100,
"width": 100,
"resources": [
{
"gradients": {
"RedWhite": {
"type": "linear",
"colorRange": ["red","white"],
"inputRange": [0,1],
"angle": 90
}
}
}
],
"items": {
"type": "path",
"pathData": "M0,0 L40,0 L40,40 L0,40",
"fill": "@RedWhite"
}
}
}
以下は、繰り返しパターンを使って塗りつぶした正方形を作成する例です。
{
"patternSquare": {
"type": "AVG",
"version": "1.2",
"height": 100,
"width": 100,
"resources": [
{
"patterns": {
"RedCircle": {
"width": 8,
"height": 8,
"items": [
{
"type": "path",
"fill": "red",
"pathData": "M0,4 a4,4,0,1,1,8,0 a4,4,0,1,1,-8,0"
}
]
}
}
}
],
"items": {
"type": "path",
"pathData": "M0,0 L40,0 L40,40 L0,40",
"fill": "@RedCircle"
}
}
}
resourcesとparametersを使えば、これらの定義を1つのAVG定義に統合してから、fillに渡すことができます。
fillOpacity
塗りつぶしに適用する不透明度です。塗りつぶしの色にも不透明度が含まれていることがあります。その場合、最終的な塗りつぶしの不透明度は、fillOpacity
と、周囲のグループおよびホスティングコンポーネントのネストされたopacity
プロパティの積になります。
fillTransform
塗りつぶしのグラデーションまたはパターンに対して適用するマトリックス変換です。fillTransform
は、単色の塗りつぶしに対しては効果を持ちません。変換の構文については、AVGグループ項目セクションのtransform
プロパティを参照してください。
pathData
pathData
は、移動コマンドで開始する必要があります。APLバージョン1.4以前の一部のAPL実装では、ほかのコマンドで開始することも可能でした。このアプローチは互換性の問題があるため、使用しないでください。SVGの「d」仕様で定義されている、1つ以上のパスコマンドを含む文字列です。以下の表は、パスのコマンドをまとめたものです。
コマンド | パラメーター | 説明 |
---|---|---|
M, m |
|
絶対座標で次のサブパスの先頭に移動します。追加のペアは暗黙的な「L」コマンドです。「m」バリアントでは相対座標を使用します。 |
L, l |
|
現在の位置から新しい位置まで、絶対座標で線を描画します。座標のペアを繰り返すことで追加の線を描画できます。「l」バリアントでは相対座標を使用します。 |
H, h |
|
絶対座標(H)または相対座標(h)で横線を描画します。 |
V, v |
|
絶対座標(H)または相対座標(h)で縦線を描画します。 |
C, c |
|
x1、y1、x2、y2を制御点として、現在の地点からx、yにベジェ曲線を描画します。絶対座標(C)または相対座標(c)を使用します。 |
S, s |
|
x 2、y 2を曲線の終点の制御点として、現在の地点からx、yまで滑らかなベジェ曲線を描画します。絶対座標(S)または相対座標(s)を使用します。 |
Q, q |
|
x1、y1を制御点として、x座標、y座標まで2次ベジェ曲線を描画します。絶対座標(Q)または相対座標(q)です。 |
T, t |
|
x座標、y座標まで滑らかな2次ベジェ曲線を描画します。この場合、制御点は前の曲線から引き継がれます。絶対座標(T)または相対座標(t)です。 |
A, a |
|
x、yの座標まで楕円弧曲線を描画します。 |
正式な定義については、SVGの仕様を参照してください。
pathLength
pathLength
により、ユーザーが定義した単位でパスの全長を指定できます。この値は距離の計算を調整するために使用され、pathLength
/(実際のパスの長さ)の比率に基づいてstrokeDashArray
プロパティとstrokeDashOffset
プロパティがスケーリングされます。
ユーザー定義のpathLength
が負の値または0の場合、その値は無視されます。
stroke
パスのストロークに使用する色、グラデーション、またはパターンです。指定しない場合、ストロークは描画されません。
以下は、グラデーションストロークを使った正方形を作成する例です。
"resources": {
"gradients": {
"RedWhite": {
"type": "linear",
"colorRange": [ "red", "white" ],
"inputRange": [0, 1],
"angle": 90
}
}
}
...
{
"type": "path",
"pathData": "M4,4 l32,0 l0,32 l-32,0",
"strokeWidth": 4,
"stroke": "@RedWhite"
}
以下は、パターンストロークを使って正方形を作成する例です。
"resources": {
"patterns": {
"RedCircle": {
"width": 8,
"height": 8,
"pathData": "M0,4 a4,4,0,1,1,8,0 a4,4,0,1,1,-8,0",
"fill": "red"
}
}
}
...
{
"type": "path",
"pathData": "M4,4 l32,0 l0,32 l-32,0",
"strokeWidth": 4,
"fill": "@RedCircle"
}
strokeDashArray
strokeDashArray
は、パスのストロークに使用する破線と空白のパターンを定義する数値の配列です。配列が空の場合、ストロークは1本となります。配列要素の数が奇数の場合、暗黙的に2倍になります。たとえば、配列[1]
は[1 1]
と解釈され、[1,2,3]
は[1,2,3,1,2,3]
と解釈されます。配列の奇数インデックスは破線の長さ(Viewport描画単位)、偶数インデックスは空白の長さ(Viewport描画単位)です。正の数値以外を指定すると、未定義の動作となります。
strokeDashArray
はpathLength
の影響を受けます。それぞれの破線と空白の長さは、pathLength
に対して相対的に解釈されます。
strokeDashArray
の個々の要素は、負でない数値であることが必要です。strokeDashArray
の要素の和は正の数値になる必要があります。長さが0の破線の外観は、strokeLineCap
の値によって変わります。「butt」の要素は描画されず、「round」の要素は直径がstrokeWidth
と等しい円になり、「square」の要素は辺の長さがstrokeWidth
と等しい正方形になります。
strokeDashOffset
strokeDashOffset
は、strokeDashArray
の開始点を、Viewport描画単位で指定した数値分、移動します。たとえば、strokeDashArray
が[2 1]
の場合にstrokeDashOffset
を2
に設定すると、線の描画は空白で始まります。
strokeDashOffset
はpathLength
の影響を受けます。それぞれの破線と空白の長さは、pathLength
に対して相対的に解釈されます。
strokeLineCap
strokeLineCap
プロパティは、開いたパスの終端に使用される図形を決定します。
strokeLineJoin
strokeLineJoin
プロパティは、パス内の角の描画方法を決定します。
strokeMiterLimit
strokeMiterLimit
プロパティは、パス内のmiter
結合を、どの時点でbevel
結合に変更するかを決定します。
strokeOpacity
線に適用する不透明度です。線の色にも不透明度が含まれていることがあります。その場合、最終的な線の不透明度は、strokeOpacity
と全体的なopacity
の積になります。
strokeTransform
ストロークのグラデーションまたはパターンに対して適用するマトリックス変化です。strokeTransform
は、単色のストロークに対しては効果を持ちません。変換構文については、transform
を参照してください。
strokeWidth
線の幅です。デフォルトは1
です。線はパスの位置に相対して中央に配置されます。
AVGグループ項目
AVGグループは、その子項目に変換を適用します。AVGグループ項目には、以下のプロパティがあります。
- すべてのAVG基本項目プロパティ
- 次の表に挙げたグループ項目プロパティ
プロパティ | 型 | デフォルト | 説明 |
---|---|---|---|
type |
”group” | 必須 | 「group」に設定する必要があります。 |
clipPath |
文字列 | なし | 切り抜きのパスです。 |
data |
配列 | <none> | 子項目にバインドするデータです。 |
item 、items |
AVG項目の配列 | [] | 子の描画項目の配列です。 |
opacity |
数値 | 1.0 | グループの不透明度です。 |
transform |
変換 | "" | グループのコンテンツに適用する変換です。 |
clipPath
クリッピングパスは、描画されないpathData
の線です。代わりに、グループの子が切り抜かれます。切り抜きは、グループの座標内で行われます。
data
任意のデータ配列です。データ配列を指定すると、AVGグラフィックはデータ配列の要素ごとに、items
配列から1つの項目をインフレートします。データバインディングコンテキストには、data
プロパティ、index
プロパティ、length
プロパティが追加されます。
item, items
AVG項目の配列です。配列は描画順であるため、後の項目が前の項目の上に表示されます。AVG項目にはtype
プロパティがあります。項目の種類は次の3つです。
when
プロパティがtrueになるitem
がインフレートされます。各項目のデータバインディングコンテキストには、index
プロパティとlength
プロパティが追加されます。これが、「子項目の単純な配列」のインフレーションアルゴリズムです。
data
プロパティに値が含まれる場合は、インフレーションアルゴリズムが変わります。data
配列の項目ごとに、items
配列から、when
プロパティがtrueになる最初の子項目がインフレートされます。データバインディングコンテキストには、data
プロパティ、index
プロパティ、length
プロパティが追加されます。これが、「データ配列」のインフレーションアルゴリズムです。
opacity
このグループに適用する全体的な不透明度です。不透明度は、ほかの不透明度の値と掛け合わされます。
transform
グループのコンテンツに適用する変換です。transform
プロパティは、SVG構文に従うテキスト文字列です。
transform ::= ( `rotate` | `scale` | `translate` | `skewX` | `skewY` )*
rotate ::="rotate" "(" `angle` [ `x` `y` ] ")"
scale ::="scale" "(" `sx` [ `sy` ] ")"
translate ::="translate" "(" `x` [ `y` ] ")"
skewX ::="skewX" "(" `angle` ")"
skewY ::="skewY" "(" `angle` ")"
数値以外の文字(スペースとコンマを含む)は無視されます。角度は度数で指定します。正の回転値は、グループの起点を中心に時計回りです。座標系は、正のx値が右側、正のy値が下側です。起点は、通常左上にあります。
以下は同等となります。
translate(x) ⟺ translate(x 0)
scale(s) ⟺ scale(s s)
rotate(a x y) ⟺ translate(x y) rotate(a) translate(-x -y)
ベクターグラフィックは、transformプロパティでデータバインディング式を使用できます。たとえば、アナログ時計の分針を正しく回転させるには、次のように記述します。
"transform": "rotate(${Time.minutes(localTime)*6})"
代替の変換プロパティ
状況によっては、サイズ調整、回転、移動の段階ごとに変換プロパティを記述する方が簡単な場合があります。代替の変換プロパティは、明示的な一連のプロパティを提供します。transform
プロパティが指定されていないときは、これらのプロパティを利用できます。transform
に値が含まれていると、これらの代替プロパティは無視されます。
プロパティ | 型 | デフォルト | 説明 |
---|---|---|---|
|
数値 |
0 |
グループの回転角度(度)です。 |
|
数値 |
0 |
回転ピボット点のX座標(viewport座標)です。 |
|
数値 |
0 |
回転ピボット点のY座標(viewport座標)です。 |
|
数値 |
1.0 |
X軸方向の倍率係数です。 |
|
数値 |
1.0 |
X軸方向の倍率係数です。 |
|
数値 |
0 |
X座標の移動(viewport座標)です。 |
|
数値 |
0 |
Y座標の移動(viewport座標)です。 |
変換は、サイズ調整、回転、移動の順に適用されます。transform
プロパティでは、同等の変換を次のように定義できます。
"transform": "translate(tx ty) rotate(rotation px py) scale(sx sy)"
AVGテキスト項目
AVGテキスト項目は、1行のテキストとして表示されます。AVGテキスト項目には以下のプロパティがあります。
- すべてのAVG基本項目プロパティ
- 次の表に挙げたテキスト項目プロパティ
プロパティ | 型 | デフォルト | 説明 |
---|---|---|---|
|
"text"(テキスト)を指定します。 |
必須 |
この項目がテキスト項目であることを示します。 |
|
色、グラデーション、パターン |
black |
テキストの塗りつぶし色、グラデーション、またはパターンです。 |
|
数値 |
1 |
テキストの塗りつぶしの不透明度です。 |
|
変換 |
— |
変換は、塗りつぶしグラデーションまたはパターンに対して適用されます。 |
|
文字列 |
sans-serif |
フォントファミリーの名前です。 |
|
正の数値 |
40 |
フォントサイズです。 |
|
normal, italic |
normal |
フォントのスタイルです。 |
|
normal, bold, 100, 200, 300, 400, 500, 600, 700, 800, 900 |
normal |
フォントの太さです。 |
|
数値 |
0 |
文字間に追加するスペースです。 |
|
色、グラデーション、パターン |
transparent |
テキストストロークの色、グラデーション、またはパターンです。 |
|
数値 |
1 |
パスストロークの不透明度です。 |
|
変換 |
"" |
変換は、ストロークグラデーションまたはパターンに対して適用されます。 |
|
負ではない数値 |
0 |
テキストストロークの幅です。 |
|
文字列 |
"" |
表示するテキストを指定します。 |
|
start、middle、end |
start |
開始点からテキストが続く方向です。 |
|
数値 |
0 |
X座標の開始点(Viewport座標)です。 |
|
数値 |
0 |
Y座標の開始点(Viewport座標)です。 |
テキスト項目がストロークと塗りつぶしの両方で描画される場合、塗りつぶしがまず描画されて、ストロークがそれに重なって描画されます。
AVGテキスト項目には、AVGパス項目およびTextコンポーネントと同じプロパティが複数あります。
次の例は、明るい背景に赤いテキストを表示するテキスト項目のグラフィックを示しています。
{
"type": "AVG",
"version": "1.2",
"height": 60,
"width": 150,
"items": [
{
"type": "path",
"pathData": "M0,0 l150,0 l0,60 l-150,0 Z",
"fill": "#d8d8d8"
},
{
"type": "text",
"fill": "red",
"fontFamily": "amazon-ember, sans-serif",
"fontSize": 60,
"text": "Hello",
"x": 75,
"y": 50,
"textAnchor": "middle"
}
]
}
次のAPLドキュメントは、このテキスト項目をViewportの中央に表示します。
fill
fill
プロパティの動作は、パス項目のfill
プロパティと同じです。
fillOpacity
fillOpacity
プロパティの動作は、パス項目のopacity
プロパティと同じです。
fillTransform
塗りつぶしのグラデーションまたはパターンに対して適用するマトリックス変換です。fillTransform
は、単色の塗りつぶしに対しては効果を持ちません。変換構文については、transform
を参照してください。
fontFamily
fontFamily
プロパティの動作は、TextコンポーネントのfontFamily
プロパティと同じです。
fontSize
フォントのサイズです。Viewport単位で表します。デフォルトは40です。
fontStyle
fontStyle
プロパティの動作は、TextコンポーネントのfontStyle
プロパティと同じです。
fontWeight
fontWeight
プロパティの動作は、TextコンポーネントのfontWeight
プロパティと同じです。
letterSpacing
文字間に追加するスペースです。負の値を指定できます。デフォルトは0です。文字間隔はViewport単位で指定します。
stroke
stroke
プロパティの動作は、パス項目のstroke
プロパティと同じです。
strokeOpacity
strokeOpacity
プロパティの動作は、パス項目のstrokeOpacity
プロパティと同じです。
strokeTransform
ストロークのグラデーションまたはパターンに対して適用するマトリックス変化です。strokeTransform
は、単色のストロークに対しては効果を持ちません。変換構文については、transform
を参照してください。
strokeWidth
strokeWidth
プロパティの動作は、パス項目のstrokeWidth
プロパティと同じです。
text
表示するテキストを指定します。表示されるテキストでは、Text
コンポーネントのtext
プロパティで使用される書式ルールのサブセットがサポートされます。<br>
や<em>
などのインラインマークアップ文字列は無視され、表示されません。マークアップ文字は、次の表に示すように文字実体参照で置き換えてください。
実体 | 文字 | 説明 |
---|---|---|
|
\& |
アンパサンド |
|
< |
小なり記号 |
|
> |
大なり記号 |
|
任意 |
10進数のUnicodeコードポイントです。「nn」は有効な整数です。 |
|
16進数のUnicodeコードポイントです。「nn」は有効な16進数です。 |
数値実体参照は10進数と16進数で表記できます。たとえば、©は©
または©
と表記できます。
文字列「Copyright © 2018, Simon & Schuster. <br><em>All Rights Reserved</em>
」は、1行に表示されます。
Copyright © 2018, Simon & Schuster.All Rights Reserved
textAnchor
始点(x, y)を基準としたテキストの方向。以下の表は、オプションをまとめたものです。
名前 | 説明 |
---|---|
|
テキストは開始点(x,y)から開始します。グラフィックの |
|
テキストは、開始点(x,y)を中心にセンタリングされます。 |
|
テキストは、開始点(x,y)で終了します。 |
x
テキストのベースラインのx座標です。textAnchor
プロパティに従って、この位置がテキストの左端、右端、中央のいずれになります。
y
テキストのベースラインのy座標です。textAnchor
プロパティに従って、この位置がテキストの左端、右端、中央のいずれになります。
AVGインフレートアルゴリズム
AVGオブジェクトは、次の手順でインフレートされます。
- 新しいデータバインディングコンテキストを作成します。
- 作成したデータバインディングコンテキストに各パラメーターを追加します。パラメーター値は、最初の一致を使用して次の順序で計算されます。
- JSONインフレートロジックから渡されます。たとえば、ユーザーは
fill
を外部から渡すことができます。VectorGraphic
を参照してください。 - 現在のスタイルから名前別に抽出されます。
- デフォルト値がパラメーターに代入されます。
- JSONインフレートロジックから渡されます。たとえば、ユーザーは
- データバインディングコンテキストに、AVGオブジェクトの計算されたViewportの
width
とheight
が追加されます。scaleTypeHeight
とscaleTypeWidth
を参照してください。 - データバインディングを適用して、AVG JSON定義をネストされたグループ、パス、テキストオブジェクトにインフレートします。
関連トピック
最終更新日: 2025 年 10 月 02 日