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 содержит как список отображения, так и набор свойств, влияющих на отрисовку списка отображения. RenderNodes используются внутренне для всех представлений по умолчанию и обычно не используются напрямую.

RenderNodes используются для разделения содержимого отрисовки сложной сцены на небольшие части, которые затем могут быть обновлены по отдельности более дешево. Обновление части сцены необходимо обновить только список отображения или свойства небольшого числа 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>Рисование отрисовки в представлении</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 при нажатии. Чтобы достичь этого, приложение может решить задать Значение 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 в любое время. Важно, чтобы объект RenderNode использовался только в том же потоке, с которым он нарисован. Например, при использовании RenderNode с пользовательским представлением этот объект должен использоваться только из потока пользовательского интерфейса.

<h3>Время повторной отрисовки</h3>

Многие методы мутации RenderNode, например #setTranslationX(float), возвращают логическое значение, указывающее, изменилось ли значение или нет. Это полезно при обнаружении необходимости отрисовки нового кадра. Обычное использование будет выглядеть следующим образом:

public void translateTo(int x, int y) {
                    boolean needsUpdate = myRenderNode.setTranslationX(x);
                    needsUpdate |= myRenderNode.setTranslationY(y);
                    if (needsUpdate) {
                        myOwningView.invalidate();
                    }
                }

Это немного быстрее, чем делать более явный передний контроль, если значение изменилось, сравнивая требуемое значение с #getTranslationX() тем, как он сводит к минимуму переходы JNI. Фактический механизм запроса нового кадра для отрисовки будет зависеть от способа рисования этого объекта RenderNode. Если он рисуется в содержательном представлении, как показано в приведенном выше фрагменте кода, то просто делается недопустимое представление. Если вместо этого объект RenderNode рисуется непосредственно на холсте, например Surface#lockHardwareCanvas() с тем, что новый кадр должен быть нарисован путем вызова Surface#lockHardwareCanvas(), повторного рисования корневого renderNode или любого содержимого верхнего уровня и, наконец, вызова Surface#unlockCanvasAndPost(Canvas). </p>

Java документации по android.graphics.RenderNode.

Части этой страницы — это изменения на основе работы, созданной и общей Project и используемых в соответствии с условиями, описанными в разделе "".

Конструкторы

Имя Описание
RenderNode(String)

Создает новый объект RenderNode, который можно использовать для записи пакетов операций рисования, а также хранения и применения свойств отрисовки при рисовании.

Свойства

Имя Описание
Alpha

Возвращает уровень транслюкентности этого списка отображения.

AmbientShadowColor

RenderNode используется для создания иерархий ускоренной отрисовки оборудования.

Bottom

Возвращает нижнее положение для RenderNode.

CameraDistance

Возвращает расстояние в Z камеры для этого RenderNode

Class

Возвращает класс среды выполнения этого Objectобъекта.

(Унаследовано от Object)
ClipToBounds

Возвращает значение, указывающее, является ли отрезка отрисовки отрезка к его границам.

ClipToOutline

См. #setClipToOutline(boolean)

Elevation

См. #setElevation(float)

Handle

Дескриптор базового экземпляра Android.

(Унаследовано от Object)
HasDisplayList

Возвращает значение, имеет ли renderNode список отображения.

HasIdentityMatrix

Имеет ли объект RenderNode преобразование удостоверений.

HasOverlappingRendering

Указывает, перекрывается ли содержимое этого списка отображения.

HasShadow

Проверяет, имеет ли отрисовка тень.

Height

Возвращает высоту RenderNode, которая является верхней.

IsForceDarkAllowed

См. #setForceDarkAllowed(boolean)

IsPivotExplicitlySet

RenderNode используется для создания иерархий ускоренной отрисовки оборудования.

JniIdentityHashCode

Возвращает хэш-код удостоверения, назначенный этому Java одноранговой среде выполнения взаимодействия.

(Унаследовано от Object)
JniManagedPeerState

RenderNode используется для создания иерархий ускоренной отрисовки оборудования.

(Унаследовано от JavaObject)
JniPeerMembers

RenderNode используется для создания иерархий ускоренной отрисовки оборудования.

Left

Возвращает левую позицию для RenderNode.

PeerReference

Возвращает ссылку на объект JNI для этого Java однорангового узла.

(Унаследовано от Object)
PivotX

Возвращает значение сводной таблицы для этого списка отображения на оси X в пикселях.

PivotY

Возвращает значение сводной таблицы для этого списка отображения на оси Y в пикселях.

Right

Возвращает правильную позицию для RenderNode.

RotationX

Возвращает значение поворота для этого списка отображения вокруг оси X в градусах.

RotationY

Возвращает значение поворота для этого списка отображения вокруг оси Y в градусах.

RotationZ

Возвращает значение поворота для этого списка отображения вокруг оси Z в градусах.

ScaleX

Возвращает значение масштабирования для этого списка отображения на оси X.

ScaleY

Возвращает значение масштабирования для этого списка отображения на оси Y.

SpotShadowColor

RenderNode используется для создания иерархий ускоренной отрисовки оборудования.

ThresholdClass

Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода.

(Унаследовано от Object)
ThresholdType

Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода.

(Унаследовано от Object)
Top

Возвращает верхнюю позицию для RenderNode.

TranslationX

Возвращает значение перевода для этого списка отображения на оси X в пикселях.

TranslationY

Возвращает значение перевода для этого списка отображения на оси Y в пикселях.

TranslationZ

Возвращает значение перевода для этого списка отображения на оси Z.

UniqueId

Возвращает уникальный идентификатор, идентифицирующий этот RenderNode.

UseCompositingLayer

Возвращает, следует ли использовать слой компостирования.

Width

Возвращает ширину renderNode, которая является правой — левой.

Методы

Имя Описание
BeginRecording()

#beginRecording(int, int) Аналогично ширине и высоте, заданной для собственной ширины и высоты RenderNode.

BeginRecording(Int32, Int32)

Начинает запись списка отображения для узла отрисовки.

Clone()

Создает и возвращает копию этого объекта.

(Унаследовано от Object)
ComputeApproximateMemoryUsage()

Возвращает приблизительное использование памяти renderNode для целей отладки.

Construct(JniObjectReference, JniObjectReferenceOptions)

RenderNode используется для создания иерархий ускоренной отрисовки оборудования.

(Унаследовано от JavaObject)
DiscardDisplayList()

Сброс собственных ресурсов.

Dispose()

Освобождает ресурсы, удерживаемые этим Java одноранговым узлом.

(Унаследовано от Object)
Dispose(Boolean)

Освобождает ресурсы, удерживаемые этим Java одноранговым узлом.

(Унаследовано от Object)
DisposeUnlessReferenced()

RenderNode используется для создания иерархий ускоренной отрисовки оборудования.

(Унаследовано от JavaObject)
EndRecording()

' Заканчивает запись для этого списка отображения.

Equals(Object)

RenderNode используется для создания иерархий ускоренной отрисовки оборудования.

(Унаследовано от JavaObject)
Equals(Object)

Указывает, равен ли другой объект этому объекту.

(Унаследовано от Object)
GetHashCode()

Возвращает хэш-значение кода для объекта.

(Унаследовано от Object)
GetInverseMatrix(Matrix)

Возвращает инвертированное текущее преобразование.

GetMatrix(Matrix)

Возвращает текущую матрицу преобразования

JavaFinalize()

Вызывается сборщиком мусора в объекте, когда сборка мусора определяет, что больше ссылок на объект нет.

(Унаследовано от Object)
Notify()

Просыпается один поток, ожидающий монитора этого объекта.

(Унаследовано от Object)
NotifyAll()

Просыпает все потоки, ожидающие монитора этого объекта.

(Унаследовано от Object)
OffsetLeftAndRight(Int32)

Смещение левых и правых позиций для RenderNode

OffsetTopAndBottom(Int32)

Смещает верхние и нижние значения для RenderNode

ResetPivot()

Очищает любую сводную таблицу, заданную ранее вызовом #setPivotX(float) или #setPivotY(float).

SetAlpha(Single)

Задает уровень транслюкентности для списка отображения.

SetAmbientShadowColor(Color)

Задает цвет тени окружающей среды, которая рисуется, когда RenderNode имеет положительное значение Z или повышение прав и рисуется внутри Canvas#enableZ() раздела.

SetCameraDistance(Single)

Задает расстояние вдоль оси Z (ортогональное значение на плоскости X/Y, на которой рисуются отрисовки от камеры к этому RenderNode.

SetClipRect(Rect)

Задает дополнительный клип на renderNode.

SetClipToBounds(Boolean)

Задайте, должен ли узел отрисовки закрепить себя к его границам.

SetClipToOutline(Boolean)

Включает или отключает вырезку в структуру.

SetElevation(Single)

Задает базовое повышение этого объекта RenderNode в пикселях

SetForceDarkAllowed(Boolean)

Задает, следует ли разрешить принудительное применение темного объекта к этому RenderNode.

SetHandle(IntPtr, JniHandleOwnership)

Задает свойство Handle.

(Унаследовано от Object)
SetHasOverlappingRendering(Boolean)

Задает, отображает ли список отображения содержимое, которое перекрывается.

SetOutline(Outline)

Задает контур, определяя фигуру, которая создает тень, и путь для обрезания, если задан параметр setClipToOutline.

SetPeerReference(JniObjectReference, JniObjectReferenceOptions)

RenderNode используется для создания иерархий ускоренной отрисовки оборудования.

(Унаследовано от JavaObject)
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>()

Создает управляемый массив из этого Java оболочки массива.

(Унаследовано от Object)
ToString()

Возвращает строковое представление объекта.

(Унаследовано от Object)
UnregisterFromRuntime()

Отменяет регистрацию этого Java однорангового узла из среды выполнения взаимодействия.

(Унаследовано от Object)
Wait()

Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, путем <><уведомления/>em или <эм>прерванного</em.>

(Унаследовано от Object)
Wait(Int64, Int32)

Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прерваны< или> до тех пор, пока не истекло определенное количество реального времени.

(Унаследовано от Object)
Wait(Int64)

Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прерваны< или> до тех пор, пока не истекло определенное количество реального времени.

(Унаследовано от Object)

Явные реализации интерфейса

Имя Описание
IJavaPeerable.Disposed()

RenderNode используется для создания иерархий ускоренной отрисовки оборудования.

(Унаследовано от JavaObject)
IJavaPeerable.Finalized()

RenderNode используется для создания иерархий ускоренной отрисовки оборудования.

(Унаследовано от JavaObject)
IJavaPeerable.JniObjectReferenceControlBlock

RenderNode используется для создания иерархий ускоренной отрисовки оборудования.

(Унаследовано от JavaObject)
IJavaPeerable.SetJniIdentityHashCode(Int32)

RenderNode используется для создания иерархий ускоренной отрисовки оборудования.

(Унаследовано от JavaObject)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

RenderNode используется для создания иерархий ускоренной отрисовки оборудования.

(Унаследовано от JavaObject)
IJavaPeerable.SetPeerReference(JniObjectReference)

RenderNode используется для создания иерархий ускоренной отрисовки оборудования.

(Унаследовано от JavaObject)

Методы расширения

Имя Описание
GetJniTypeName(IJavaPeerable)

Возвращает имя JNI типа экземпляра self.

JavaAs<TResult>(IJavaPeerable)

Попробуйте принуждать к типуself, проверяяTResult, является ли приведение допустимым на стороне Java.

JavaCast<TResult>(IJavaObject)

Выполняет преобразование типа, проверяемого средой выполнения Android.

JavaCast<TResult>(IJavaObject)

RenderNode используется для создания иерархий ускоренной отрисовки оборудования.

TryJavaCast<TResult>(IJavaPeerable, TResult)

Попробуйте принуждать к типуself, проверяяTResult, является ли приведение допустимым на стороне Java.

Применяется к