RenderNode クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
RenderNode は、ハードウェア アクセラレータレンダリング階層を構築するために使用されます。
[Android.Runtime.Register("android/graphics/RenderNode", ApiSince=29, DoNotGenerateAcw=true)]
public sealed class RenderNode : Java.Lang.Object
[<Android.Runtime.Register("android/graphics/RenderNode", ApiSince=29, DoNotGenerateAcw=true)>]
type RenderNode = class
inherit Object
- 継承
- 属性
注釈
RenderNode は、ハードウェア アクセラレータレンダリング階層を構築するために使用されます。 各 RenderNode には、表示リストと、表示リストのレンダリングに影響するプロパティのセットの両方が含まれています。 RenderNodes は、既定ではすべてのビューに対して内部的に使用され、通常は直接使用されません。
RenderNode は、複雑なシーンのレンダリング コンテンツをより小さな部分に分割するために使用され、個別により安価に更新できます。 シーンの一部を更新する場合は、すべてを最初から再描画するのではなく、少数の RenderNode の表示リストまたはプロパティを更新するだけで済みます。 RenderNode では、コンテンツのみを変更する必要がある場合にのみ、表示リストを再記録する必要があります。 RenderNodes は、変換プロパティを使用して表示リストを再記録せずに変換することもできます。
テキスト エディターは、インスタンス用に各段落を独自の RenderNode に格納する場合があります。 したがって、ユーザーが文字を挿入または削除する場合は、影響を受ける段落の表示リストのみを再度記録する必要があります。
<h3>ハードウェア アクセラレーション</h3>
RenderNodes は、 を使用して RecordingCanvas
描画できます。 ソフトウェアではサポートされていません。 表示リストのレンダリングに使用している が android.graphics.Canvas
、 を使用してハードウェアアクセラレータ android.graphics.Canvas#isHardwareAccelerated()
されていることを常に確認してください。
<h3>RenderNode</h3 の作成>
RenderNode renderNode = new RenderNode("myRenderNode");
renderNode.setPosition(0, 0, 50, 50); // Set the size to 50x50
RecordingCanvas canvas = renderNode.beginRecording();
try {
// Draw with the canvas
canvas.drawRect(...);
} finally {
renderNode.endRecording();
}
<h3>ビュー<での RenderNode の描画/h3>
protected void onDraw(Canvas canvas) {
if (canvas.isHardwareAccelerated()) {
// Check that the RenderNode has a display list, re-recording it if it does not.
if (!myRenderNode.hasDisplayList()) {
updateDisplayList(myRenderNode);
}
// Draw the RenderNode into this canvas.
canvas.drawRenderNode(myRenderNode);
}
}
<h3>リソース<の解放/h3>
この手順は必須ではありませんが、表示リストによって保持されているリソースをできるだけ早く解放する場合に推奨されます。 最も重要なのは、ビットマップに含まれる可能性があるビットマップです。
// Discards the display list content allowing for any held resources to be released.
// After calling this
renderNode.discardDisplayList();
<h3>プロパティ</h3>
さらに、RenderNode には、 や #setTranslationX(float)
など#setScaleX(float)
、いくつかのプロパティが用意されています。このプロパティを使用すると、内に記録されたすべての描画コマンドに影響を与えることができます。 たとえば、これらのプロパティを使用すると、個々 canvas.drawBitmap()
のすべての呼び出しを再発行することなく、多数のイメージを移動できます。
private void createDisplayList() {
mRenderNode = new RenderNode("MyRenderNode");
mRenderNode.setPosition(0, 0, width, height);
RecordingCanvas canvas = mRenderNode.beginRecording();
try {
for (Bitmap b : mBitmaps) {
canvas.drawBitmap(b, 0.0f, 0.0f, null);
canvas.translate(0.0f, b.getHeight());
}
} finally {
mRenderNode.endRecording();
}
}
protected void onDraw(Canvas canvas) {
if (canvas.isHardwareAccelerated())
canvas.drawRenderNode(mRenderNode);
}
}
private void moveContentBy(int x) {
// This will move all the bitmaps recorded inside the display list
// by x pixels to the right and redraw this view. All the commands
// recorded in createDisplayList() won't be re-issued, only onDraw()
// will be invoked and will execute very quickly
mRenderNode.offsetLeftAndRight(x);
invalidate();
}
プロパティの一部は、 や #setTranslationZ(float)
など、最初は冗長に#setElevation(float)
表示される場合があります。 これらの重複の理由は、静的 & 一時的な使用を分離できるようにするためです。 たとえば、押すと 2dp から 8dp に上がるボタンがあるとします。 これを実現するために、アプリケーションはElevation(2dip)を設定し、押すとsetTranslationZを6dipにアニメーション化できます。 これを組み合わせると、最終的に必要な 8dip 値が得られますが、アニメーションは、最初の開始値を知らなくても、プレスからのリフトをアニメーション化することだけに関心を持つ必要があります。 #setTranslationX(float)
と #setTranslationY(float)
は、機能が と重複しているにもかかわらず、アニメーションの使用にも同様に #setPosition(Rect)
提供されます。
RenderNode の変換マトリックスは、レンダリング時に次のように計算されます。
Matrix transform = new Matrix();
transform.setTranslate(renderNode.getTranslationX(), renderNode.getTranslationY());
transform.preRotate(renderNode.getRotationZ(),
renderNode.getPivotX(), renderNode.getPivotY());
transform.preScale(renderNode.getScaleX(), renderNode.getScaleY(),
renderNode.getPivotX(), renderNode.getPivotY());
現在のキャンバス変換マトリックスは、RenderNode の位置に変換され、RenderNode の変換マトリックスで乗算されます。 したがって、呼び出し元のプロパティ セッターの順序は、結果には影響しません。 つまり、次のようになります。
renderNode.setTranslationX(100);
renderNode.setScaleX(100);
は以下に匹敵します。
renderNode.setScaleX(100);
renderNode.setTranslationX(100);
<h3>Threading</h3>
RenderNode は、任意のスレッドで作成および使用できますが、スレッド セーフではありません。 特定の時点で RenderNode と対話できるスレッドは 1 つだけです。 RenderNode は、描画に使用されているのと同じスレッドでのみ使用することが重要です。 たとえば、カスタム ビューで RenderNode を使用する場合、その RenderNode は UI スレッドからのみ使用する必要があります。
<h3>再レンダリング<する場合/h3>
などの #setTranslationX(float)
RenderNode ミューテーション メソッドの多くは、値が実際に変更されたかどうかを示すブール値を返します。 これは、新しいフレームをレンダリングする必要があるかどうかを検出する場合に役立ちます。 一般的な使用方法は次のようになります。
public void translateTo(int x, int y) {
boolean needsUpdate = myRenderNode.setTranslationX(x);
needsUpdate |= myRenderNode.setTranslationY(y);
if (needsUpdate) {
myOwningView.invalidate();
}
}
これは、JNI 遷移を最小限に抑えるため、目的#getTranslationX()
の値を と比較して値が変更された場合に、より明示的な事前チェックを実行するよりも、少し高速です。 レンダリングする新しいフレームを要求する実際のメカニズムは、この RenderNode の描画方法によって異なります。 上記のスニペットのように、それを含むビューに描画されている場合は、そのビューを無効にするだけで機能します。 代わりに、 のように Surface#lockHardwareCanvas()
RenderNode がキャンバスに直接描画されている場合は、 を呼び出 Surface#lockHardwareCanvas()
して新しいフレームを描画し、ルート RenderNode または必要な最上位コンテンツを再描画し、最後に を呼び出す Surface#unlockCanvasAndPost(Canvas)
必要があります。 </p>
の Java ドキュメント android.graphics.RenderNode
。
このページの一部は、によって作成および共有され、に記載されている条件に従って使用される作業に基づく変更です。
コンストラクター
RenderNode(String) |
描画操作のバッチを記録し、描画時にレンダリング プロパティを格納/適用するために使用できる新しい RenderNode を作成します。 |
プロパティ
Alpha |
この表示リストの半透明レベルを返します。 |
AmbientShadowColor |
RenderNode は、ハードウェア アクセラレータレンダリング階層を構築するために使用されます。 |
Bottom |
RenderNode の一番下の位置を取得します。 |
CameraDistance |
この RenderNode のカメラの Z 単位の距離を返します。 |
Class |
この |
ClipToBounds |
RenderNode が境界にクリッピングされているかどうかを返します。 |
ClipToOutline |
「 |
Elevation |
「 |
Handle |
基になる Android インスタンスへのハンドル。 (継承元 Object) |
HasDisplayList |
RenderNode に表示リストがあるかどうかを返します。 |
HasIdentityMatrix |
RenderNode に ID 変換があるかどうか。 |
HasOverlappingRendering |
この表示リストの内容が重なるかどうかを示します。 |
HasShadow |
RenderNode に影があるかどうかを確認します。 |
Height |
下 - 上である RenderNode の高さを取得します。 |
IsForceDarkAllowed |
「 |
IsPivotExplicitlySet |
RenderNode は、ハードウェア アクセラレータレンダリング階層を構築するために使用されます。 |
JniIdentityHashCode |
RenderNode は、ハードウェア アクセラレータレンダリング階層を構築するために使用されます。 (継承元 Object) |
JniPeerMembers |
RenderNode は、ハードウェア アクセラレータレンダリング階層を構築するために使用されます。 |
Left |
RenderNode の左側の位置を取得します。 |
PeerReference |
RenderNode は、ハードウェア アクセラレータレンダリング階層を構築するために使用されます。 (継承元 Object) |
PivotX |
X 軸のこの表示リストのピボット値をピクセル単位で返します。 |
PivotY |
Y 軸のこの表示リストのピボット値をピクセル単位で返します。 |
Right |
RenderNode の適切な位置を取得します。 |
RotationX |
X 軸の周りのこの表示リストの回転値を度単位で返します。 |
RotationY |
Y 軸を中心とするこの表示リストの回転値を度単位で返します。 |
RotationZ |
Z 軸の周りのこの表示リストの回転値を度単位で返します。 |
ScaleX |
X 軸のこの表示リストのスケール値を返します。 |
ScaleY |
Y 軸のこの表示リストのスケール値を返します。 |
SpotShadowColor |
RenderNode は、ハードウェア アクセラレータレンダリング階層を構築するために使用されます。 |
ThresholdClass |
この API は Android 用 Mono インフラストラクチャをサポートしており、コードから直接使用することを意図したものではありません。 (継承元 Object) |
ThresholdType |
この API は Android 用 Mono インフラストラクチャをサポートしており、コードから直接使用することを意図したものではありません。 (継承元 Object) |
Top |
RenderNode の最上位の位置を取得します。 |
TranslationX |
X 軸のこの表示リストの変換値をピクセル単位で返します。 |
TranslationY |
Y 軸のこの表示リストの変換値をピクセル単位で返します。 |
TranslationZ |
Z 軸のこの表示リストの変換値を返します。 |
UniqueId |
この RenderNode を識別する一意の ID を返します。 |
UseCompositingLayer |
合成レイヤーを強制的に使用するかどうかを取得します。 |
Width |
右から左の RenderNode の幅を取得します。 |
メソッド
BeginRecording() |
|
BeginRecording(Int32, Int32) |
レンダー ノードの表示リストの記録を開始します。 |
Clone() |
このオブジェクトのコピーを作成して返します。 (継承元 Object) |
ComputeApproximateMemoryUsage() |
デバッグ目的での RenderNode のおおよそのメモリ使用量を取得します。 |
DiscardDisplayList() |
ネイティブ リソースをリセットします。 |
Dispose() |
RenderNode は、ハードウェア アクセラレータレンダリング階層を構築するために使用されます。 (継承元 Object) |
Dispose(Boolean) |
RenderNode は、ハードウェア アクセラレータレンダリング階層を構築するために使用されます。 (継承元 Object) |
EndRecording() |
' この表示リストの記録を終了します。 |
Equals(Object) |
他のオブジェクトがこのオブジェクトと "等しい" かどうかを示します。 (継承元 Object) |
GetHashCode() |
オブジェクトのハッシュ コード値を返します。 (継承元 Object) |
GetInverseMatrix(Matrix) |
反転された現在の変換を取得します。 |
GetMatrix(Matrix) |
現在の変換マトリックスを取得します |
JavaFinalize() |
ガベージ コレクションがオブジェクトへの参照がなくなったと判断したときに、オブジェクトのガベージ コレクターによって呼び出されます。 (継承元 Object) |
Notify() |
このオブジェクトのモニターで待機している 1 つのスレッドをウェイクアップします。 (継承元 Object) |
NotifyAll() |
このオブジェクトのモニターで待機しているすべてのスレッドをウェイクアップします。 (継承元 Object) |
OffsetLeftAndRight(Int32) |
RenderNode の左右の位置をオフセットします。 |
OffsetTopAndBottom(Int32) |
RenderNode の上と下の値をオフセットします |
ResetPivot() |
または |
SetAlpha(Single) |
表示リストの半透明レベルを設定します。 |
SetAmbientShadowColor(Color) |
RenderNode に正の Z 値または標高値があり、セクション内に描画される場合に描画されるアンビエント シャドウの色を |
SetCameraDistance(Single) |
カメラからこの RenderNode までの Z 軸 (RenderNode が描画される X/Y 平面に直交) に沿った距離を設定します。 |
SetClipRect(Rect) |
RenderNode に追加のクリップを設定します。 |
SetClipToBounds(Boolean) |
レンダー ノード自体を境界にクリップするかどうかを設定します。 |
SetClipToOutline(Boolean) |
アウトラインへのクリッピングを有効または無効にします。 |
SetElevation(Single) |
この RenderNode の基本標高をピクセル単位で設定します |
SetForceDarkAllowed(Boolean) |
この RenderNode に強制的に濃色を適用するかどうかを設定します。 |
SetHandle(IntPtr, JniHandleOwnership) |
Handle プロパティを設定します。 (継承元 Object) |
SetHasOverlappingRendering(Boolean) |
表示リストが重なるコンテンツをレンダリングするかどうかを設定します。 |
SetOutline(Outline) |
輪郭を設定し、影を付ける図形を定義し、setClipToOutline が設定されている場合にクリップするパスを設定します。 |
SetPivotX(Single) |
X 軸の表示リストのピボット値を設定します |
SetPivotY(Single) |
Y 軸の表示リストのピボット値を設定します |
SetPosition(Int32, Int32, Int32, Int32) |
RenderNode の位置を設定します。 |
SetPosition(Rect) |
RenderNode の位置を設定します。 |
SetProjectBackwards(Boolean) |
プロジェクション レシーバーを含む最も近い先祖 RenderNode の直後に RenderNode を描画するかどうかを設定します。 |
SetProjectionReceiver(Boolean) |
RenderNode がプロジェクション レシーバーであるかどうかを設定します。 |
SetRenderEffect(RenderEffect) |
|
SetRotationX(Single) |
X 軸の周りの表示リストの回転値を設定します。 |
SetRotationY(Single) |
Y 軸の周りの表示リストの回転値を設定します。 |
SetRotationZ(Single) |
Z 軸の周りの表示リストの回転値を設定します。 |
SetScaleX(Single) |
X 軸の表示リストのスケール値を設定します。 |
SetScaleY(Single) |
Y 軸の表示リストのスケール値を設定します。 |
SetSpotShadowColor(Color) |
RenderNode に正の Z 値または標高値があり、セクション内に描画される場合に描画されるスポット シャドウの色を |
SetTranslationX(Single) |
X 軸の表示リストの変換値を設定します。 |
SetTranslationY(Single) |
Y 軸の表示リストの変換値を設定します。 |
SetTranslationZ(Single) |
Z 軸の表示リストの変換値を設定します。 |
SetUseCompositingLayer(Boolean, Paint) |
この RenderNode を強制的に中間バッファーにレンダリングするかどうかを制御します。 |
ToArray<T>() |
RenderNode は、ハードウェア アクセラレータレンダリング階層を構築するために使用されます。 (継承元 Object) |
ToString() |
オブジェクトの文字列形式を返します。 (継承元 Object) |
UnregisterFromRuntime() |
RenderNode は、ハードウェア アクセラレータレンダリング階層を構築するために使用されます。 (継承元 Object) |
Wait() |
現在のスレッドが起動するまで待機します。通常<>は、通知</em> または <em>割り込み</em によって待機します>。 (継承元 Object) |
Wait(Int64) |
現在のスレッドが起動するまで待機します。通常<>は、通知</em> または>< em 割り込み</em>、または一定のリアルタイムが経過するまで待機します。 (継承元 Object) |
Wait(Int64, Int32) |
現在のスレッドが起動するまで待機します。通常<>は、通知</em> または>< em 割り込み</em>、または一定のリアルタイムが経過するまで待機します。 (継承元 Object) |
明示的なインターフェイスの実装
IJavaPeerable.Disposed() |
RenderNode は、ハードウェア アクセラレータレンダリング階層を構築するために使用されます。 (継承元 Object) |
IJavaPeerable.DisposeUnlessReferenced() |
RenderNode は、ハードウェア アクセラレータレンダリング階層を構築するために使用されます。 (継承元 Object) |
IJavaPeerable.Finalized() |
RenderNode は、ハードウェア アクセラレータレンダリング階層を構築するために使用されます。 (継承元 Object) |
IJavaPeerable.JniManagedPeerState |
RenderNode は、ハードウェア アクセラレータレンダリング階層を構築するために使用されます。 (継承元 Object) |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
RenderNode は、ハードウェア アクセラレータレンダリング階層を構築するために使用されます。 (継承元 Object) |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
RenderNode は、ハードウェア アクセラレータレンダリング階層を構築するために使用されます。 (継承元 Object) |
IJavaPeerable.SetPeerReference(JniObjectReference) |
RenderNode は、ハードウェア アクセラレータレンダリング階層を構築するために使用されます。 (継承元 Object) |
拡張メソッド
JavaCast<TResult>(IJavaObject) |
Android ランタイムチェック型変換を実行します。 |
JavaCast<TResult>(IJavaObject) |
RenderNode は、ハードウェア アクセラレータレンダリング階層を構築するために使用されます。 |
GetJniTypeName(IJavaPeerable) |
RenderNode は、ハードウェア アクセラレータレンダリング階層を構築するために使用されます。 |