RenderNode クラス

定義

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 は、ハードウェア アクセラレータレンダリング階層を構築するために使用されます。 各 RenderNode には、表示リストと、表示リストのレンダリングに影響するプロパティのセットの両方が含まれています。 RenderNode は既定ですべてのビューに対して内部的に使用され、通常は直接使用されません。

RenderNode は、複雑なシーンのレンダリング コンテンツをより小さな部分に分割するために使用され、個別により安価に更新できます。 シーンの一部を更新する必要があるのは、ゼロからすべてを再描画するのではなく、少数の RenderNode の表示リストまたはプロパティを更新することだけです。 RenderNode では、コンテンツのみを変更する必要がある場合にのみ、表示リストを再記録する必要があります。 RenderNodes は、変換プロパティを使用して表示リストを再記録せずに変換することもできます。

インスタンス用のテキスト エディターは、各段落を独自の RenderNode に格納する場合があります。 したがって、ユーザーが文字を挿入または削除する場合は、影響を受ける段落の表示リストのみを再度記録する必要があります。

<h3>Hardware アクセラレーション</h3>

RenderNode は、 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>Properties</h3>

さらに、RenderNode には、 #setScaleX(float)#setTranslationX(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();
                }

最初は、 #setElevation(float)#setTranslationZ(float)など、いくつかのプロパティが冗長に表示されることがあります。 これらの重複の理由は、静的な使用法と一時的な使用法を分離できるようにするためです。 たとえば、押すと 2dp から 8dp に上がるボタンがあるとします。 これを実現するには、アプリケーションが setElevation(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 は、任意のスレッドで作成および使用できますが、スレッド セーフではありません。 1 つのスレッドのみが、特定の時点で RenderNode と対話できます。 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 の描画方法によって異なります。 上記のスニペットのように、それが含まれているビューに描画されている場合は、そのビューを無効にするだけです。 代わりに、RenderNode がキャンバスに直接描画されている場合 ( Surface#lockHardwareCanvas() など)、 Surface#lockHardwareCanvas()を呼び出して新しいフレームを描画し、ルート RenderNode または必要な最上位のコンテンツを再描画し、最後に Surface#unlockCanvasAndPost(Canvas)を呼び出す必要があります。 /p< を >する

Javaドキュメント。

このページの一部は、によって作成および共有され、に記載されている条件に従って使用される作業に基づく変更です。

コンストラクター

名前 説明
RenderNode(String)

描画操作のバッチを記録し、描画時にレンダリング プロパティを格納/適用するために使用できる新しい RenderNode を作成します。

プロパティ

名前 説明
Alpha

この表示リストの半透明レベルを返します。

AmbientShadowColor

RenderNode は、ハードウェア アクセラレータレンダリング階層を構築するために使用されます。

Bottom

RenderNode の一番下の位置を取得します。

CameraDistance

この RenderNode のカメラの距離 (Z) を返します。

Class

この Objectのランタイム クラスを返します。

(継承元 Object)
ClipToBounds

RenderNode が境界にクリッピングされているかどうかを返します。

ClipToOutline

#setClipToOutline(boolean)」を参照してください。

Elevation

#setElevation(float)」を参照してください。

Handle

基になる Android インスタンスへのハンドル。

(継承元 Object)
HasDisplayList

RenderNode に表示リストがあるかどうかを返します。

HasIdentityMatrix

RenderNode に ID 変換があるかどうか。

HasOverlappingRendering

この表示リストの内容が重なるかどうかを示します。

HasShadow

RenderNode に影があるかどうかを確認します。

Height

下 - 上である RenderNode の高さを取得します。

IsForceDarkAllowed

#setForceDarkAllowed(boolean)」を参照してください。

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()

幅と高さが RenderNode の独自の幅と高さに設定されている #beginRecording(int, int) と同じです。

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()

#setPivotX(float)または#setPivotY(float)の呼び出しによって以前に設定されたピボットをクリアします。

SetAlpha(Single)

表示リストの半透明レベルを設定します。

SetAmbientShadowColor(Color)

RenderNode に正の Z 値または標高値があり、 Canvas#enableZ() セクション内に描画される場合に描画されるアンビエント シャドウの色を設定します。

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)

この RenderNode に適用する android.graphics.RenderEffect を構成します。

SetRotationX(Single)

X 軸の周りの表示リストの回転値を設定します。

SetRotationY(Single)

Y 軸の周りの表示リストの回転値を設定します。

SetRotationZ(Single)

Z 軸の周りの表示リストの回転値を設定します。

SetScaleX(Single)

X 軸の表示リストのスケール値を設定します。

SetScaleY(Single)

Y 軸の表示リストのスケール値を設定します。

SetSpotShadowColor(Color)

RenderNode に正の Z 値または標高値があり、 Canvas#enableZ() セクション内に描画される場合に描画されるスポット シャドウの色を設定します。

SetTranslationX(Single)

X 軸の表示リストの平行移動値を設定します。

SetTranslationY(Single)

Y 軸の表示リストの平行移動値を設定します。

SetTranslationZ(Single)

Z 軸の表示リストの平行移動値を設定します。

SetUseCompositingLayer(Boolean, Paint)

この RenderNode を強制的に中間バッファーにレンダリングするかどうかを制御します。

ToArray<T>()

RenderNode は、ハードウェア アクセラレータレンダリング階層を構築するために使用されます。

(継承元 Object)
ToString()

オブジェクトの文字列形式を返します。

(継承元 Object)
UnregisterFromRuntime()

RenderNode は、ハードウェア アクセラレータレンダリング階層を構築するために使用されます。

(継承元 Object)
Wait()

現在のスレッドが起動するまで待機します。通常は、 <em>notified</em> または <em>interrupted</em>。

(継承元 Object)
Wait(Int64, Int32)

現在のスレッドは、通常、 <em>notified</em> または <em>interrupted</em>、または一定のリアルタイムが経過するまで、起動されるまで待機します。

(継承元 Object)
Wait(Int64)

現在のスレッドは、通常、 <em>notified</em> または <em>interrupted</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)

拡張メソッド

名前 説明
GetJniTypeName(IJavaPeerable)

インスタンス selfの型の JNI 名を取得します。

JavaAs<TResult>(IJavaPeerable)

selfを強制的にTResult入力し、強制型がJava側で有効であることを確認します。

JavaCast<TResult>(IJavaObject)

Android ランタイムチェック型変換を実行します。

JavaCast<TResult>(IJavaObject)

RenderNode は、ハードウェア アクセラレータレンダリング階層を構築するために使用されます。

TryJavaCast<TResult>(IJavaPeerable, TResult)

selfを強制的にTResult入力し、強制型がJava側で有効であることを確認します。

適用対象