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>Рисование 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 предлагает несколько свойств, таких как #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 можно создать и использовать в любом потоке, но он не является потокобезопасной. Только один поток может взаимодействовать с 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 рисуется непосредственно в Canvas, например с Surface#lockHardwareCanvas() , то необходимо нарисовать новый кадр путем вызова Surface#lockHardwareCanvas(), повторного рисования корневого RenderNode или любого содержимого верхнего уровня и, наконец, вызова Surface#unlockCanvasAndPost(Canvas). </p>

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

Части этой страницы являются изменениями, основанными на работе, созданной и совместно используемой проектом Android и используемой в соответствии с условиями, Creative Commons 2.5 Attribution License.

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

RenderNode(String)

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

Свойства

Alpha

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

AmbientShadowColor

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

Bottom

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

CameraDistance

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

Class

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

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

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

ClipToOutline

См. раздел #setClipToOutline(boolean)

Elevation

См. раздел #setElevation(float)

Handle

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

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

Возвращает значение, указывающее, имеет ли RenderNode отображаемый список.

HasIdentityMatrix

Указывает, имеет ли RenderNode преобразование идентификатора.

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 поддерживает инфраструктуру 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 в целях отладки.

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

Очищает все сведения, ранее заданные при вызове #setPivotX(float) или #setPivotY(float).

SetAlpha(Single)

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

SetAmbientShadowColor(Color)

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

SetCameraDistance(Single)

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

SetClipRect(Rect)

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

SetClipToBounds(Boolean)

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

SetClipToOutline(Boolean)

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

SetElevation(Single)

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

SetForceDarkAllowed(Boolean)

Указывает, следует ли разрешить принудительное применение dark к этому 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()

Вызывает ожидание текущего потока, пока он не пробудится, как правило, из-за <уведомления><<> или>прерывания или прерывания.><

(Унаследовано от 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 используется для создания иерархий отрисовки с аппаратным ускорением.

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