Share via


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는 기본적으로 모든 뷰에 내부적으로 사용되며 일반적으로 직접 사용되지 않습니다.

RenderNodes는 복잡한 장면의 렌더링 콘텐츠를 더 작은 조각으로 나눈 다음 개별적으로 더 저렴하게 업데이트할 수 있도록 하는 데 사용됩니다. 장면의 일부를 업데이트하려면 모든 항목을 처음부터 다시 그리는 대신 소수의 RenderNode의 표시 목록 또는 속성만 업데이트하면 됩니다. RenderNode는 콘텐츠만 변경해야 하는 경우에만 표시 목록을 다시 기록해야 합니다. RenderNode는 변환 속성을 통해 표시 목록을 다시 기록하지 않고도 변환할 수 있습니다.

텍스트 편집기에서 instance 각 단락을 자체 RenderNode에 저장할 수 있습니다. 따라서 사용자가 문자를 삽입하거나 제거하면 영향을 받는 단락의 표시 목록만 다시 기록해야 합니다.

<h3>하드웨어 가속</h3>

RenderNode는 를 사용하여 RecordingCanvas그릴 수 있습니다. 소프트웨어에서는 지원되지 않습니다. 항상 를 사용하여 디스플레이 목록을 렌더링하는 데 사용하는 하드웨어가 을 사용하여 android.graphics.Canvas#isHardwareAccelerated()가속화되었는지 확인 android.graphics.Canvas 합니다.

<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 보기</h3>에서 RenderNode 그리기>

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) 여러 속성을 제공합니다. instance 경우 이러한 속성을 사용하여 모든 개별 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로 상승하는 단추를 고려합니다. 이를 위해 애플리케이션이 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의 변환 매트릭스를 곱합니다. 따라서 속성 setter를 호출하는 순서는 결과에 영향을 주지 않습니다. 즉, 그 말을하는 것입니다 :

renderNode.setTranslationX(100);
                renderNode.setScaleX(100);

이는 다음과 동등합니다.

renderNode.setScaleX(100);
                renderNode.setTranslationX(100);

<h3>스레딩</h3>

RenderNode는 모든 스레드에서 만들고 사용할 수 있지만 스레드로부터 안전하지는 않습니다. 특정 시간에 단일 스레드만 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 설명서입니다 android.graphics.RenderNode.

이 페이지의 일부는 만들고 공유하며 에 설명된 용어에 따라 사용되는 작업을 기반으로 수정됩니다.

생성자

RenderNode(String)

그리기 작업의 일괄 처리를 기록하는 데 사용할 수 있는 새 RenderNode를 만들고 그리기 시 렌더링 속성을 저장/적용합니다.

속성

Alpha

이 표시 목록의 반투명 수준을 반환합니다.

AmbientShadowColor

RenderNode는 하드웨어 가속 렌더링 계층 구조를 빌드하는 데 사용됩니다.

Bottom

RenderNode의 아래쪽 위치를 가져옵니다.

CameraDistance

이 RenderNode에 대한 카메라의 Z 거리를 반환합니다.

Class

Object의 런타임 클래스를 반환합니다.

(다음에서 상속됨 Object)
ClipToBounds

RenderNode가 해당 범위로 클리핑되는지 여부를 반환합니다.

ClipToOutline

#setClipToOutline(boolean)을 참조하십시오.

Elevation

#setElevation(float)을 참조하십시오.

Handle

기본 Android instance 대한 핸들입니다.

(다음에서 상속됨 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()

#beginRecording(int, int) 너비 & 높이가 RenderNode의 너비 & 높이로 설정된 경우와 동일합니다.

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

이 개체의 모니터에서 대기 중인 단일 스레드를 해제합니다.

(다음에서 상속됨 Object)
NotifyAll()

이 개체의 모니터에서 대기 중인 모든 스레드를 해제합니다.

(다음에서 상속됨 Object)
OffsetLeftAndRight(Int32)

RenderNode의 왼쪽 및 오른쪽 위치를 오프셋합니다.

OffsetTopAndBottom(Int32)

RenderNode의 위쪽 및 아래쪽 값을 오프셋합니다.

ResetPivot()

또는 #setPivotY(float)를 호출 #setPivotX(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)

android.graphics.RenderEffect 이 RenderNode에 적용할 을 구성합니다.

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>)합니다<.

(다음에서 상속됨 Object)
Wait(Int64)

현재 스레드가 깨어날 때까지 대기하게 합니다. 일반적으로 <>알림을 받<거나 <중단</>내보내>>거나 일정량의 실시간이 경과할 때까지 대기합니다.

(다음에서 상속됨 Object)
Wait(Int64, Int32)

현재 스레드가 깨어날 때까지 대기하게 합니다. 일반적으로 <>알림을 받<거나 <중단</>내보내>>거나 일정량의 실시간이 경과할 때까지 대기합니다.

(다음에서 상속됨 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는 하드웨어 가속 렌더링 계층 구조를 빌드하는 데 사용됩니다.

적용 대상