Native Activity

摘要

枚举

匿名枚举 107{
  AWINDOW_FLAG_ALLOW_LOCK_WHILE_SCREEN_ON = 0x00000001,
  AWINDOW_FLAG_DIM_BEHIND = 0x00000002,
  AWINDOW_FLAG_BLUR_BEHIND = 0x00000004,
  AWINDOW_FLAG_NOT_FOCUSABLE = 0x00000008,
  AWINDOW_FLAG_NOT_TOUCHABLE = 0x00000010,
  AWINDOW_FLAG_NOT_TOUCH_MODAL = 0x00000020,
  AWINDOW_FLAG_TOUCHABLE_WHEN_WAKING = 0x00000040,
  AWINDOW_FLAG_KEEP_SCREEN_ON = 0x00000080,
  AWINDOW_FLAG_LAYOUT_IN_SCREEN = 0x00000100,
  AWINDOW_FLAG_LAYOUT_NO_LIMITS = 0x00000200,
  AWINDOW_FLAG_FULLSCREEN = 0x00000400,
  AWINDOW_FLAG_FORCE_NOT_FULLSCREEN = 0x00000800,
  AWINDOW_FLAG_DITHER = 0x00001000,
  AWINDOW_FLAG_SECURE = 0x00002000,
  AWINDOW_FLAG_SCALED = 0x00004000,
  AWINDOW_FLAG_IGNORE_CHEEK_PRESSES = 0x00008000,
  AWINDOW_FLAG_LAYOUT_INSET_DECOR = 0x00010000,
  AWINDOW_FLAG_ALT_FOCUSABLE_IM = 0x00020000,
  AWINDOW_FLAG_WATCH_OUTSIDE_TOUCH = 0x00040000,
  AWINDOW_FLAG_SHOW_WHEN_LOCKED = 0x00080000,
  AWINDOW_FLAG_SHOW_WALLPAPER = 0x00100000,
  AWINDOW_FLAG_TURN_SCREEN_ON = 0x00200000,
  AWINDOW_FLAG_DISMISS_KEYGUARD = 0x00400000
}
枚举
窗口标志,如同 Java API 中的 android.view.WindowManager.LayoutParams。
匿名枚举 51{
  ANATIVEACTIVITY_SHOW_SOFT_INPUT_IMPLICIT = 0x0001,
  ANATIVEACTIVITY_SHOW_SOFT_INPUT_FORCED = 0x0002
}
枚举
ANativeActivity_showSoftInput 的标志;请参阅 Java InputMethodManager API 以获取文档。
匿名枚举 52{
  ANATIVEACTIVITY_HIDE_SOFT_INPUT_IMPLICIT_ONLY = 0x0001,
  ANATIVEACTIVITY_HIDE_SOFT_INPUT_NOT_ALWAYS = 0x0002
}
枚举
ANativeActivity_hideSoftInput 的标志;请参阅 Java InputMethodManager API 以获取文档。
ASurfaceTransactionTransparency{
  ASURFACE_TRANSACTION_TRANSPARENCY_TRANSPARENT = 0,
  ASURFACE_TRANSACTION_TRANSPARENCY_TRANSLUCENT = 1,
  ASURFACE_TRANSACTION_TRANSPARENCY_OPAQUE = 2
}
枚举
ASurfaceTransactionVisibility{
  ASURFACE_TRANSACTION_VISIBILITY_HIDE = 0,
  ASURFACE_TRANSACTION_VISIBILITY_SHOW = 1
}
枚举

类型定义

AInputReceiver typedef
保存对已注册输入通道引用的 InputReceiver。
AInputReceiverCallbacks typedef
struct AInputReceiverCallbacks
AInputReceiver_onKeyEvent)(void *_Null_unspecified context, AInputEvent *_Nonnull keyEvent) typedef
bool(*
当已注册的输入通道收到按键事件时,会调用 AInputReceiver_onKeyEvent 回调。
AInputReceiver_onMotionEvent)(void *_Null_unspecified context, AInputEvent *_Nonnull motionEvent) typedef
bool(*
当已注册的输入通道收到运动事件时,会调用 AInputReceiver_onMotionEvent 回调。
AInputTransferToken typedef
AInputTransferToken 可用于请求焦点或在嵌入式 SurfaceControl 之间转移触控手势。
ANativeActivity typedef
此结构定义 android.app.NativeActivity 的原生端。
ANativeActivityCallbacks typedef
这些是框架对原生应用进行的回调。
ANativeActivity_createFunc(ANativeActivity *activity, void *savedState, size_t savedStateSize) typedef
void
这是必须位于原生代码中用于实例化应用原生 activity 的函数。
ARect typedef
struct ARect
矩形窗口区域。
ASurfaceControl typedef
SurfaceControl API 可用于提供 surface 层次结构,以便与系统合成器进行合成。
ASurfaceTransaction typedef
ASurfaceTransaction 是必须原子化应用的 surface 树更新集合。
ASurfaceTransactionStats typedef
回调期间返回的不透明句柄,可用于查询一般统计信息,以及查询在此事务应用后被移除或缓冲区已更新的 surface 的统计信息。
ASurfaceTransaction_OnBufferRelease)(void *_Null_unspecified context, int release_fence_fd) typedef
void(*
当通过 ASurfaceTransaction_setBuffer 传入的缓冲区可供重复使用时,会调用 ASurfaceTransaction_OnBufferRelease 回调。
ASurfaceTransaction_OnCommit)(void *_Null_unspecified context, ASurfaceTransactionStats *_Nonnull stats) typedef
void(*
当事务应用且更新准备好呈现时,会调用 ASurfaceTransaction_OnCommit 回调。
ASurfaceTransaction_OnComplete)(void *_Null_unspecified context, ASurfaceTransactionStats *_Nonnull stats) typedef
void(*
由于事务是异步应用的,因此可以使用 ASurfaceTransaction_OnComplete 回调来在呈现包含事务中更新的帧时收到通知。

变量

ANativeActivity_onCreate
NativeInstance 在启动其原生代码时查找的函数名称。

函数

AInputReceiverCallbacks_create(void *_Nullable context)
AInputReceiverCallbacks *_Nonnull
创建 AInputReceiverCallbacks 对象,该对象在注册 AInputReceiver 时使用。
AInputReceiverCallbacks_release(AInputReceiverCallbacks *_Nullable callbacks)
void
释放 AInputReceiverCallbacks。
AInputReceiverCallbacks_setKeyEventCallback(AInputReceiverCallbacks *_Nonnull callbacks, AInputReceiver_onKeyEvent _Nonnull onKeyEvent)
void
为 AInputReceiverCallbacks 设置 AInputReceiver_onKeyEvent 回调。
AInputReceiverCallbacks_setMotionEventCallback(AInputReceiverCallbacks *_Nonnull callbacks, AInputReceiver_onMotionEvent _Nonnull onMotionEvent)
void
为 AInputReceiverCallbacks 设置 AInputReceiver_onMotionEvent 回调。
AInputReceiver_createBatchedInputReceiver(AChoreographer *_Nonnull aChoreographer, const AInputTransferToken *_Nonnull hostInputTransferToken, const ASurfaceControl *_Nonnull aSurfaceControl, AInputReceiverCallbacks *_Nonnull aInputReceiverCallbacks)
AInputReceiver *_Nonnull
为 ASurfaceControl 注册输入接收器,该接收器将接收批量输入事件。
AInputReceiver_createUnbatchedInputReceiver(ALooper *_Nonnull aLooper, const AInputTransferToken *_Nonnull hostInputTransferToken, const ASurfaceControl *_Nonnull aSurfaceControl, AInputReceiverCallbacks *_Nonnull aInputReceiverCallbacks)
AInputReceiver *_Nonnull
为 ASurfaceControl 注册输入接收器,该接收器将接收每个输入事件。
AInputReceiver_getInputTransferToken(AInputReceiver *_Nonnull aInputReceiver)
const AInputTransferToken *_Nonnull
返回 AInputTransferToken,该 token 可用于在其他窗口之间转移触控手势。
AInputReceiver_release(AInputReceiver *_Nullable aInputReceiver)
void
注销输入通道并删除 AInputReceiver。
AInputTransferToken_fromJava(JNIEnv *_Nonnull env, jobject _Nonnull inputTransferTokenObj)
返回由 Java InputTransferToken 对象封装的 AInputTransferToken。
AInputTransferToken_release(AInputTransferToken *_Nullable aInputTransferToken)
void
移除先前在原生代码中获取的引用。
AInputTransferToken_toJava(JNIEnv *_Nonnull env, const AInputTransferToken *_Nonnull aInputTransferToken)
jobject _Nonnull
返回封装 AInputTransferToken 的 Java InputTransferToken 对象。
ANativeActivity_finish(ANativeActivity *activity)
void
结束给定的 activity。
ANativeActivity_hideSoftInput(ANativeActivity *activity, uint32_t flags)
void
在给定 activity 中隐藏 IME(输入法编辑器)。
ANativeActivity_setWindowFlags(ANativeActivity *activity, uint32_t addFlags, uint32_t removeFlags)
void
更改给定 activity 的窗口标志。
ANativeActivity_setWindowFormat(ANativeActivity *activity, int32_t format)
void
更改给定 activity 的窗口格式。
ANativeActivity_showSoftInput(ANativeActivity *activity, uint32_t flags)
void
在给定 activity 中显示 IME(输入法编辑器)。
ANativeWindow_fromSurface(JNIEnv *env, jobject surface)
返回与 Java Surface 对象关联的 ANativeWindow,以便通过原生代码与其互动。
ANativeWindow_toSurface(JNIEnv *env, ANativeWindow *window)
jobject
返回派生自 ANativeWindow 的 Java Surface 对象,以便通过 Java 代码与其互动。
ASurfaceControl_acquire(ASurfaceControl *_Nonnull surface_control)
void
获取给定 ASurfaceControl 对象的引用。
ASurfaceControl_create(ASurfaceControl *_Nonnull parent, const char *_Nonnull debug_name)
ASurfaceControl *_Nullable
请参阅 ASurfaceControl_createFromWindow。
ASurfaceControl_createFromWindow(ANativeWindow *_Nonnull parent, const char *_Nonnull debug_name)
ASurfaceControl *_Nullable
创建以 ANativeWindow 或 ASurfaceControl 作为其父级的 ASurfaceControl。
ASurfaceControl_fromJava(JNIEnv *_Nonnull env, jobject _Nonnull surfaceControlObj)
ASurfaceControl *_Nonnull
返回由 Java SurfaceControl 对象封装的 ASurfaceControl。
ASurfaceControl_release(ASurfaceControl *_Nonnull surface_control)
void
移除先前通过以下任一函数获取的引用:ASurfaceControl_createFromWindow、ASurfaceControl_create、ANativeWindow_acquire。只要其父级仍显示,surface 及其子级就可能仍显示。
ASurfaceTransactionStats_getASurfaceControls(ASurfaceTransactionStats *_Nonnull surface_transaction_stats, ASurfaceControl *_Nullable *_Nullable *_Nonnull outASurfaceControls, size_t *_Nonnull outASurfaceControlsSize)
void
outASurfaceControls 返回在事务期间更新的 ASurfaceControl 指针数组。
ASurfaceTransactionStats_getAcquireTime(ASurfaceTransactionStats *_Nonnull surface_transaction_stats, ASurfaceControl *_Nonnull surface_control)
int64_t
已弃用。 这可能会返回 SIGNAL_PENDING,因为统计信息可能在获取栅栏发出信号之前到达,具体取决于内部时序差异。因此,调用者应使用传入 setBuffer 中的获取栅栏并查询信号时间。
返回 CURRENT 缓冲区获取时的时间戳。
ASurfaceTransactionStats_getLatchTime(ASurfaceTransactionStats *_Nonnull surface_transaction_stats)
int64_t
返回框架锁定帧时的时间戳。
ASurfaceTransactionStats_getPresentFenceFd(ASurfaceTransactionStats *_Nonnull surface_transaction_stats)
int
返回一个同步栅栏,该栅栏在事务呈现时发出信号。
ASurfaceTransactionStats_getPreviousReleaseFenceFd(ASurfaceTransactionStats *_Nonnull surface_transaction_stats, ASurfaceControl *_Nonnull surface_control)
int
返回用于指示在此 surface 上设置的 PREVIOUS 缓冲区已释放的栅栏。
ASurfaceTransactionStats_releaseASurfaceControls(ASurfaceControl *_Nonnull *_Nonnull surface_controls)
void
释放由 ASurfaceTransactionStats_getASurfaceControls() 返回的 ASurfaceControl 数组。
ASurfaceTransaction_apply(ASurfaceTransaction *_Nonnull transaction)
void
应用在 transaction 中累积的更新。
ASurfaceTransaction_clearFrameRate(ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control)
void
清除为 surface_control 设置的帧率。
ASurfaceTransaction_create()
调用者拥有该事务,并且必须使用下面的 ASurfaceTransaction_delete() 函数释放它。
ASurfaceTransaction_delete(ASurfaceTransaction *_Nullable transaction)
void
销毁 transaction 对象。
ASurfaceTransaction_fromJava(JNIEnv *_Nonnull env, jobject _Nonnull transactionObj)
返回由 Java Transaction 对象封装的 ASurfaceTransaction。
ASurfaceTransaction_reparent(ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, ASurfaceControl *_Nullable new_parent)
void
surface_control 从其旧的父级重新指向 new_parent surface control。
ASurfaceTransaction_setBuffer(ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, AHardwareBuffer *_Nonnull buffer, int acquire_fence_fd)
void
更新为 surface_control 显示的 AHardwareBuffer。
ASurfaceTransaction_setBufferAlpha(ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, float alpha)
void
设置缓冲区的 alpha。
ASurfaceTransaction_setBufferDataSpace(ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, enum ADataSpace data_space)
void
设置 surface_control 缓冲区的色彩空间。
ASurfaceTransaction_setBufferTransform(ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, int32_t transform)
void
ASurfaceTransaction_setBufferTransparency(ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, enum ASurfaceTransactionTransparency transparency)
void
更新与此 surface 关联的缓冲区内容是否完全不透明。
ASurfaceTransaction_setBufferWithRelease(ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, AHardwareBuffer *_Nonnull buffer, int acquire_fence_fd, void *_Null_unspecified context, ASurfaceTransaction_OnBufferRelease _Nonnull func)
void
更新为 surface_control 显示的 AHardwareBuffer。
ASurfaceTransaction_setColor(ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, float r, float g, float b, float alpha, enum ADataSpace dataspace)
void
更新 surface_control 的颜色。
ASurfaceTransaction_setCrop(ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, const ARect *_Nonnull crop)
void
将 surface 及其子级限定到指定的边界内。
ASurfaceTransaction_setDamageRegion(ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, const ARect *_Nullable rects, uint32_t count)
void
更新此事务中在此 surface 上更新的内容区域。
ASurfaceTransaction_setDesiredHdrHeadroom(ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, float desiredHeadroom)
void
为层设置所需的 HDR 余量。
ASurfaceTransaction_setDesiredPresentTime(ASurfaceTransaction *_Nonnull transaction, int64_t desiredPresentTime)
void
为此事务指定 desiredPresentTime。
ASurfaceTransaction_setEnableBackPressure(ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, bool enableBackPressure)
void
指示是否启用对提交到给定 SurfaceControl 的缓冲区的背压(backpressure)。
ASurfaceTransaction_setExtendedRangeBrightness(ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, float currentBufferRatio, float desiredRatio)
void
为层设置所需的扩展范围亮度。
ASurfaceTransaction_setFrameRate(ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, float frameRate, int8_t compatibility)
void
与 ASurfaceTransaction_setFrameRateWithChangeStrategy(transaction, 0, compatibility, changeFrameRateStrategy) 相同。
ASurfaceTransaction_setFrameRateWithChangeStrategy(ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, float frameRate, int8_t compatibility, int8_t changeFrameRateStrategy)
void
surface_control 设置预期帧率。
ASurfaceTransaction_setFrameTimeline(ASurfaceTransaction *_Nonnull transaction, AVsyncId vsyncId)
void
设置在 SurfaceFlinger 中使用的帧时间轴。
ASurfaceTransaction_setGeometry(ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, const ARect *_Nonnull source, const ARect *_Nonnull destination, int32_t transform)
void
已弃用。 请改用 setCrop、setPosition、setBufferTransform 和 setScale。这些函数提供明确定义的行为,并允许应用进行更多控制。它还允许调用者在不同时间设置不同的属性,而无需一次指定所有所需的属性。
ASurfaceTransaction_setHdrMetadata_cta861_3(ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, struct AHdrMetadata_cta861_3 *_Nullable metadata)
void
在 surface 上设置 CTA 861.3“HDR Static Metadata Extension”静态元数据。
ASurfaceTransaction_setHdrMetadata_smpte2086(ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, struct AHdrMetadata_smpte2086 *_Nullable metadata)
void
SMPTE ST 2086“Mastering Display Color Volume”静态元数据。
ASurfaceTransaction_setOnCommit(ASurfaceTransaction *_Nonnull transaction, void *_Null_unspecified context, ASurfaceTransaction_OnCommit _Nonnull func)
void
设置回调,该回调在应用此事务中的更新并准备好呈现时被调用。
ASurfaceTransaction_setOnComplete(ASurfaceTransaction *_Nonnull transaction, void *_Null_unspecified context, ASurfaceTransaction_OnComplete _Nonnull func)
void
设置回调,该回调在呈现此事务中的更新时被调用。
ASurfaceTransaction_setPosition(ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, int32_t x, int32_t y)
void
指定 surface 在父级空间中绘制的位置。
ASurfaceTransaction_setScale(ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, float xScale, float yScale)
void
以 (0, 0) 为缩放中心点,设置 surface 的 x 和 y 缩放比例。
ASurfaceTransaction_setVisibility(ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, enum ASurfaceTransactionVisibility visibility)
void
更新 surface_control 的可见性。
ASurfaceTransaction_setZOrder(ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, int32_t z_order)
void
更新 surface_control 的 z 顺序索引。

结构体

ANativeActivity

此结构定义 android.app.NativeActivity 的原生端。

ANativeActivityCallbacks

这些是框架对原生应用进行的回调。

ARect

矩形窗口区域。

枚举

匿名枚举 107

android/window.h 中声明
 Anonymous Enum 107

窗口标志,如同 Java API 中的 android.view.WindowManager.LayoutParams。

属性
AWINDOW_FLAG_ALLOW_LOCK_WHILE_SCREEN_ON

只要此窗口对用户可见,就允许在屏幕开启时激活锁定屏幕。

此标志可以独立使用,也可以与 AWINDOW_FLAG_KEEP_SCREEN_ON 和/或 AWINDOW_FLAG_SHOW_WHEN_LOCKED 结合使用。

AWINDOW_FLAG_ALT_FOCUSABLE_IM

根据此窗口与当前方法的互动方式,反转 AWINDOW_FLAG_NOT_FOCUSABLE 的状态。

也就是说,如果设置了 FLAG_NOT_FOCUSABLE 且也设置了此标志,则窗口将表现为需要与输入法互动,并因此被放置在其后/远离它;如果未设置 AWINDOW_FLAG_NOT_FOCUSABLE 且设置了此标志,则窗口将表现为不需要与输入法互动,并且可以被放置以使用更多空间并覆盖输入法。

AWINDOW_FLAG_BLUR_BEHIND

模糊此窗口后面的所有内容。

已弃用。 不再支持模糊效果。

AWINDOW_FLAG_DIM_BEHIND

此窗口后面的所有内容都将变暗。

AWINDOW_FLAG_DISMISS_KEYGUARD

设置后,只有在不是安全锁定屏幕的情况下,该窗口才会导致锁定屏幕被解除。

由于这种锁定屏幕不需要安全性,因此如果用户导航到另一个窗口,它将永远不会重新出现(与 AWINDOW_FLAG_SHOW_WHEN_LOCKED 不同,后者只会暂时隐藏安全和非安全锁定屏幕,但确保当用户移动到不会隐藏它们的另一个界面时它们会重新出现)。如果当前锁定屏幕处于活动状态且是安全的(需要解锁模式),则用户仍然需要在看到此窗口之前确认它,除非也设置了 AWINDOW_FLAG_SHOW_WHEN_LOCKED

AWINDOW_FLAG_DITHER

将此窗口合成到屏幕时启用抖动。

已弃用。 此标志不再使用。

AWINDOW_FLAG_FORCE_NOT_FULLSCREEN

覆盖 AWINDOW_FLAG_FULLSCREEN 并强制显示屏幕装饰(例如状态栏)。

AWINDOW_FLAG_FULLSCREEN

显示此窗口时隐藏所有屏幕装饰(例如状态栏)。

这允许窗口使用整个显示空间;当设置此标志的应用窗口位于顶层时,状态栏将被隐藏。全屏窗口将忽略 SOFT_INPUT_ADJUST_RESIZE 的值;窗口将保持全屏且不会调整大小。

AWINDOW_FLAG_IGNORE_CHEEK_PRESSES

旨在用于用户经常将屏幕贴近脸部时使用的窗口,它将积极过滤事件流,以防止在这种情况下可能不希望特定窗口发生的意外按下;当检测到此类事件流时,应用将收到一个 AMOTION_EVENT_ACTION_CANCEL 来指示此情况,以便应用可以相应地处理,直到手指释放之前不对事件采取任何操作。

AWINDOW_FLAG_KEEP_SCREEN_ON

只要此窗口对用户可见,就保持设备的屏幕开启并高亮度。

AWINDOW_FLAG_LAYOUT_INSET_DECOR

仅与 AWINDOW_FLAG_LAYOUT_IN_SCREEN 结合使用的特殊选项。

在请求屏幕内布局时,您的窗口可能会显示在屏幕装饰(例如状态栏)上方或下方。通过同时包含此标志,窗口管理器将报告所需的插入矩形,以确保您的内容不被屏幕装饰覆盖。

AWINDOW_FLAG_LAYOUT_IN_SCREEN

将窗口放置在整个屏幕内,忽略边界周围的装饰(例如状态栏)。

窗口必须正确放置其内容,以考虑屏幕装饰。

AWINDOW_FLAG_LAYOUT_NO_LIMITS

允许窗口扩展到屏幕外。

AWINDOW_FLAG_NOT_FOCUSABLE

此窗口永远不会获得按键输入焦点,因此用户无法向其发送按键或其他按钮事件。

这些事件将转到其后面的任何可获得焦点的窗口。无论是否明确设置了 AWINDOW_FLAG_NOT_TOUCH_MODAL,此标志也将启用它。

设置此标志还意味着窗口不需要与软输入法互动,因此其 Z 轴顺序和位置将独立于任何活动的输入法(通常这意味着它在输入法上方以 Z 轴排序,因此它可以将其内容全屏显示并在需要时覆盖输入法。您可以使用 AWINDOW_FLAG_ALT_FOCUSABLE_IM 修改此行为。

AWINDOW_FLAG_NOT_TOUCHABLE

此窗口永远不能接收触控事件。

AWINDOW_FLAG_NOT_TOUCH_MODAL

即使此窗口可获得焦点(其 AWINDOW_FLAG_NOT_FOCUSABLE 未设置),也允许将窗口外的任何指针事件发送到其后面的窗口。

否则,它将自行消耗所有指针事件,无论它们是否在窗口内。

AWINDOW_FLAG_SCALED

一种特殊模式,其中布局参数用于在将 surface 合成到屏幕时对其进行缩放。

AWINDOW_FLAG_SECURE

将窗口内容视为安全内容,防止其出现在屏幕截图中或在非安全显示器上查看。

AWINDOW_FLAG_SHOW_WALLPAPER

请求在您的窗口后面显示系统壁纸。

窗口 surface 必须是半透明的才能真正看到后面的壁纸;此标志仅确保如果此窗口确实具有半透明区域,则壁纸 surface 会存在。

AWINDOW_FLAG_SHOW_WHEN_LOCKED

屏幕锁定时允许显示窗口的特殊标志。

这将使应用窗口优先于锁定屏幕或任何其他锁屏。可与 AWINDOW_FLAG_KEEP_SCREEN_ON 结合使用,以打开屏幕并在显示锁定屏幕窗口之前直接显示窗口。可与 AWINDOW_FLAG_DISMISS_KEYGUARD 结合使用,以自动完全解除非安全锁定屏幕。此标志仅适用于最顶层的全屏窗口。

AWINDOW_FLAG_TOUCHABLE_WHEN_WAKING

设置后,如果在触摸屏按下时设备处于睡眠状态,您将收到此首次触控事件。

通常,由于用户看不到他们在按什么,首次触控事件会被系统消耗。

已弃用。 此标志无效。

AWINDOW_FLAG_TURN_SCREEN_ON

当窗口被添加或可见时设置此标志,一旦窗口显示,系统将触发电源管理器的用户活动(如同用户唤醒了设备),以打开屏幕。

AWINDOW_FLAG_WATCH_OUTSIDE_TOUCH

如果您已设置 AWINDOW_FLAG_NOT_TOUCH_MODAL,您可以设置此标志以接收一个特殊的 MotionEvent,其 action 为 AMOTION_EVENT_ACTION_OUTSIDE,用于在窗口外部发生的触控事件。

请注意,您不会收到完整的按下/移动/抬起手势,只会收到作为 AMOTION_EVENT_ACTION_OUTSIDE 的首次按下的位置。

匿名枚举 51

android/native_activity.h 中声明
 Anonymous Enum 51

ANativeActivity_showSoftInput 的标志;请参阅 Java InputMethodManager API 以获取文档。

属性
ANATIVEACTIVITY_SHOW_SOFT_INPUT_FORCED

用户已强制打开输入法(例如通过长按菜单),因此在用户明确关闭之前,不应关闭输入法。

ANATIVEACTIVITY_SHOW_SOFT_INPUT_IMPLICIT

隐式请求显示输入窗口,而不是用户直接请求的结果。

匿名枚举 52

android/native_activity.h 中声明
 Anonymous Enum 52

ANativeActivity_hideSoftInput 的标志;请参阅 Java InputMethodManager API 以获取文档。

属性
ANATIVEACTIVITY_HIDE_SOFT_INPUT_IMPLICIT_ONLY

软输入窗口仅应在不是用户明确显示的情况下被隐藏。

ANATIVEACTIVITY_HIDE_SOFT_INPUT_NOT_ALWAYS

软输入窗口通常应被隐藏,除非最初是使用 ANATIVEACTIVITY_SHOW_SOFT_INPUT_FORCED 显示的。

ASurfaceTransactionTransparency

android/surface_control.h 中声明
 ASurfaceTransactionTransparency

ASurfaceTransactionVisibility

android/surface_control.h 中声明
 ASurfaceTransactionVisibility

类型定义

AInputReceiver

android/surface_control_input_receiver.h 中声明
struct AInputReceiver AInputReceiver

保存对已注册输入通道引用的 InputReceiver。

必须使用 AInputReceiver_release 释放此对象

AInputReceiverCallbacks

android/surface_control_input_receiver.h 中声明
struct AInputReceiverCallbacks AInputReceiverCallbacks

AInputReceiver_onKeyEvent

android/surface_control_input_receiver.h 中声明
bool(* AInputReceiver_onKeyEvent)(void *_Null_unspecified context, AInputEvent *_Nonnull keyEvent)

当已注册的输入通道收到按键事件时,会调用 AInputReceiver_onKeyEvent 回调。

自 API 级别 35 起可用。

详细信息
参数
context
客户端提供的可选上下文,在创建 AInputReceiverCallbacks 时传入。
keyEvent
按键事件。必须使用 AInputEvent_release 释放此事件。

AInputReceiver_onMotionEvent

android/surface_control_input_receiver.h 中声明
bool(* AInputReceiver_onMotionEvent)(void *_Null_unspecified context, AInputEvent *_Nonnull motionEvent)

当已注册的输入通道收到运动事件时,会调用 AInputReceiver_onMotionEvent 回调。

自 API 级别 35 起可用。

详细信息
参数
context
客户端提供的可选上下文,在创建 AInputReceiverCallbacks 时传入。
motionEvent
运动事件。必须使用 AInputEvent_release 释放此事件。

AInputTransferToken

android/input_transfer_token_jni.h 中声明
struct AInputTransferToken AInputTransferToken

AInputTransferToken 可用于请求焦点或在嵌入式 SurfaceControl 之间转移触控手势。

ANativeActivity

android/native_activity.h 中声明
struct ANativeActivity ANativeActivity

此结构定义 android.app.NativeActivity 的原生端。

它由框架创建,并在应用的原生代码启动时传递给它。

ANativeActivityCallbacks

android/native_activity.h 中声明
struct ANativeActivityCallbacks ANativeActivityCallbacks

这些是框架对原生应用进行的回调。

所有这些回调都在应用的主线程上发生。默认情况下,所有回调均为 NULL;设置为指向您自己的函数以使其被调用。

ANativeActivity_createFunc

android/native_activity.h 中声明
void ANativeActivity_createFunc(ANativeActivity *activity, void *savedState, size_t savedStateSize)

这是必须位于原生代码中用于实例化应用原生 activity 的函数。

它与 activity 实例一起被调用(参见上文);如果代码是从之前保存的实例中实例化的,则 savedState 将非 NULL 并指向保存的数据。您必须复制您需要的任何此数据,它将在您从此函数返回后被释放。

ARect

android/rect.h 中声明
struct ARect ARect

矩形窗口区域。

这是 Java 中 android.graphics.Rect 类的 NDK 等效项。它与 ANativeActivityCallbacks::onContentRectChanged 事件回调和 ANativeWindow_lock() 函数一起使用。

在有效的 ARect 中,left <= right 且 top <= bottom。ARect (left=0, top=10, right=1, bottom=11) 只包含一个像素,位于 x=0, y=10。

ASurfaceControl

android/surface_control.h 中声明
struct ASurfaceControl ASurfaceControl

SurfaceControl API 可用于提供 surface 层次结构,以便与系统合成器进行合成。

ASurfaceControl 代表此层次结构中的一个内容节点。

ASurfaceTransaction

android/surface_control.h 中声明
struct ASurfaceTransaction ASurfaceTransaction

ASurfaceTransaction 是必须原子化应用的 surface 树更新集合。

ASurfaceTransactionStats

android/surface_control.h 中声明
struct ASurfaceTransactionStats ASurfaceTransactionStats

回调期间返回的不透明句柄,可用于查询一般统计信息,以及查询在此事务应用后被移除或缓冲区已更新的 surface 的统计信息。

ASurfaceTransaction_OnBufferRelease

android/surface_control.h 中声明
void(* ASurfaceTransaction_OnBufferRelease)(void *_Null_unspecified context, int release_fence_fd)

当通过 ASurfaceTransaction_setBuffer 传入的缓冲区可供重复使用时,会调用 ASurfaceTransaction_OnBufferRelease 回调。

如果调用 ASurfaceTransaction_setBuffer 时传入非空缓冲区,则保证调用此回调。如果事务中的缓冲区通过另一次调用 ASurfaceTransaction_setBuffer 被替换,则会立即调用回调。否则,回调将在缓冲区呈现后、ASurfaceTransaction_OnComplete 回调之前被调用。

如果设置了此回调,调用者不应使用 ASurfaceTransaction_OnComplete 释放缓冲区。

线程:回调可以在任何线程上调用。

详细信息
参数
context
客户端提供的可选上下文,传入回调函数。
release_fence_fd
返回用于指示与此回调关联的缓冲区已释放的栅栏文件描述符。如果此栅栏有效 (>=0),则缓冲区尚未释放,栅栏将在缓冲区释放时发出信号。如果栅栏为 -1,则缓冲区已释放。回调的接收方拥有栅栏文件描述符的所有权,并负责关闭它。

自 API 级别 36 起可用。

ASurfaceTransaction_OnCommit

android/surface_control.h 中声明
void(* ASurfaceTransaction_OnCommit)(void *_Null_unspecified context, ASurfaceTransactionStats *_Nonnull stats)

当事务应用且更新准备好呈现时,会调用 ASurfaceTransaction_OnCommit 回调。

此回调将在 ASurfaceTransaction_OnComplete 回调之前被调用。

此回调并不意味着缓冲区已释放!它仅表示任何新应用的事务都不会覆盖我们正在接收回调的事务,而是将包含在下一帧中。如果您正在尝试避免丢帧(覆盖事务),并且无法使用时间戳(提供更有效的解决方案),则此方法提供了一种调整事务应用速度的方法。

线程:事务提交回调可以在任何线程上调用。

详细信息
参数
context
客户端提供的可选上下文,传入回调函数。
stats
不透明句柄,可以传递给 ASurfaceTransactionStats 函数以查询有关事务的信息。此句柄仅在回调期间有效。Present 和 release 栅栏对此回调不可用。使用 ASurfaceTransactionStats_getPresentFenceFd 和 ASurfaceTransactionStats_getPreviousReleaseFenceFd 查询它们将导致失败。

自 API 级别 31 起可用。

ASurfaceTransaction_OnComplete

android/surface_control.h 中声明
void(* ASurfaceTransaction_OnComplete)(void *_Null_unspecified context, ASurfaceTransactionStats *_Nonnull stats)

由于事务是异步应用的,因此可以使用 ASurfaceTransaction_OnComplete 回调来在呈现包含事务中更新的帧时收到通知。

在此回调调用的事务中被替换或从场景中移除的缓冲区在此之后可以重复使用。

从 API 级别 36 开始,首选使用 ASurfaceTransaction_OnBufferRelease 来监听缓冲区何时可供重复使用。

线程:事务完成回调可以在任何线程上调用。

详细信息
参数
context
客户端提供的可选上下文,传入回调函数。
stats
不透明句柄,可以传递给 ASurfaceTransactionStats 函数以查询有关事务的信息。此句柄仅在回调期间有效。

自 API 级别 29 起可用。

变量

ANativeActivity_onCreate

android/native_activity.h 中声明
ANativeActivity_createFunc ANativeActivity_onCreate

NativeInstance 在启动其原生代码时查找的函数名称。

这是使用的默认函数,您可以在您的 manifest 中指定“android.app.func_name”字符串元数据以使用不同的函数。

函数

AInputReceiverCallbacks_create

android/surface_control_input_receiver.h 中声明
AInputReceiverCallbacks *_Nonnull AInputReceiverCallbacks_create(
  void *_Nullable context
)

创建 AInputReceiverCallbacks 对象,该对象在注册 AInputReceiver 时使用。

必须使用 AInputReceiverCallbacks_release 释放此对象

自 API 级别 35 起可用。

详细信息
参数
context
客户端提供的可选上下文,将传递给回调函数。

AInputReceiverCallbacks_release

android/surface_control_input_receiver.h 中声明
void AInputReceiverCallbacks_release(
  AInputReceiverCallbacks *_Nullable callbacks
)

释放 AInputReceiverCallbacks。

必须在创建 AInputReceiver 的同一 looper 线程上调用此函数。释放后,接收器将不再调用任何回调。

自 API 级别 35 起可用

AInputReceiverCallbacks_setKeyEventCallback

android/surface_control_input_receiver.h 中声明
void AInputReceiverCallbacks_setKeyEventCallback(
  AInputReceiverCallbacks *_Nonnull callbacks,
  AInputReceiver_onKeyEvent _Nonnull onKeyEvent
)

为 AInputReceiverCallbacks 设置 AInputReceiver_onKeyEvent 回调。

自 API 级别 35 起可用。

详细信息
参数
callbacks
用于设置按键事件的回调对象。
onKeyEvent
将为按键事件调用的回调函数

AInputReceiverCallbacks_setMotionEventCallback

android/surface_control_input_receiver.h 中声明
void AInputReceiverCallbacks_setMotionEventCallback(
  AInputReceiverCallbacks *_Nonnull callbacks,
  AInputReceiver_onMotionEvent _Nonnull onMotionEvent
)

为 AInputReceiverCallbacks 设置 AInputReceiver_onMotionEvent 回调。

自 API 级别 35 起可用。

详细信息
参数
callbacks
用于设置按键事件的回调对象。
onKeyEvent
将为运动事件调用的回调函数

AInputReceiver_createBatchedInputReceiver

android/surface_control_input_receiver.h 中声明
AInputReceiver *_Nonnull AInputReceiver_createBatchedInputReceiver(
  AChoreographer *_Nonnull aChoreographer,
  const AInputTransferToken *_Nonnull hostInputTransferToken,
  const ASurfaceControl *_Nonnull aSurfaceControl,
  AInputReceiverCallbacks *_Nonnull aInputReceiverCallbacks
)

为 ASurfaceControl 注册输入接收器,该接收器将接收批量输入事件。

对于那些被批处理的事件,将在每个 AChoreographer 帧中调用一次,而其他输入事件将立即传递。

这与 AInputReceiver_createUnbatchedInputReceiver 不同之处在于输入事件是批量接收的。当不再需要使用输入接收器时,调用者必须调用 AInputReceiver_release 来清理资源。

返回 AInputReceiver 的引用,以便在完成后清理资源。

详细信息
参数
aChoreographer
用于批处理的 AChoreographer。这应与渲染 AChoreographer 匹配。
hostInputTransferToken
用于链接嵌入式对象的主机 token。这用于处理从主机到嵌入式对象的触控手势转移,以及用于 ANR,以确保如果在嵌入式对象上发生任何触控问题时主机接收到 ANR。这可以通过调用 AttachedSurfaceControl::getInputTransferToken() 为主机窗口检索到。
aSurfaceControl
用于注册 InputChannel 的 ASurfaceControl
aInputReceiverCallbacks
将接收输入事件的 SurfaceControlInputReceiver

自 API 级别 35 起可用。

AInputReceiver_createUnbatchedInputReceiver

android/surface_control_input_receiver.h 中声明
AInputReceiver *_Nonnull AInputReceiver_createUnbatchedInputReceiver(
  ALooper *_Nonnull aLooper,
  const AInputTransferToken *_Nonnull hostInputTransferToken,
  const ASurfaceControl *_Nonnull aSurfaceControl,
  AInputReceiverCallbacks *_Nonnull aInputReceiverCallbacks
)

为 ASurfaceControl 注册输入接收器,该接收器将接收每个输入事件。

这与 AInputReceiver_createBatchedInputReceiver 不同之处在于输入事件是未批量接收的。当不再需要使用输入接收器时,调用者必须调用 AInputReceiver_release 来清理资源。

返回 AInputReceiver 的引用,以便在完成后清理资源。

详细信息
参数
aLooper
调用回调时使用的 looper。
hostInputTransferToken
用于链接嵌入式对象的主机 token。这用于处理从主机到嵌入式对象的触控手势转移,以及用于 ANR,以确保如果在嵌入式对象上发生任何触控问题时主机接收到 ANR。这可以通过调用 AttachedSurfaceControl::getInputTransferToken() 为主机窗口检索到。
aSurfaceControl
用于注册 InputChannel 的 ASurfaceControl
aInputReceiverCallbacks
将接收输入事件的 SurfaceControlInputReceiver

自 API 级别 35 起可用。

AInputReceiver_getInputTransferToken

android/surface_control_input_receiver.h 中声明
const AInputTransferToken *_Nonnull AInputReceiver_getInputTransferToken(
  AInputReceiver *_Nonnull aInputReceiver
)

返回 AInputTransferToken,该 token 可用于在其他窗口之间转移触控手势。

此 InputTransferToken 与注册了输入接收器的 SurfaceControl 相关联,并且可以与主机 token 一起用于通过 WindowManager::transferTouchGesture() 等方式转移触控手势。

必须使用 AInputTransferToken_release 释放此对象。

自 API 级别 35 起可用。

详细信息
参数
aInputReceiver
要为其检索 AInputTransferToken 的 inputReceiver 对象。

AInputReceiver_release

android/surface_control_input_receiver.h 中声明
void AInputReceiver_release(
  AInputReceiver *_Nullable aInputReceiver
)

注销输入通道并删除 AInputReceiver。

必须在创建它的同一 looper 线程上调用此函数。

自 API 级别 35 起可用。

详细信息
参数
aInputReceiver
要释放的 inputReceiver 对象。

AInputTransferToken_fromJava

android/input_transfer_token_jni.h 中声明
AInputTransferToken *_Nonnull AInputTransferToken_fromJava(
  JNIEnv *_Nonnull env,
  jobject _Nonnull inputTransferTokenObj
)

返回由 Java InputTransferToken 对象封装的 AInputTransferToken。

必须使用 AInputTransferToken_release 释放此对象

inputTransferTokenObj 必须是 android.window.InputTransferToken 的非空实例。

自 API 级别 35 起可用。

AInputTransferToken_release

android/input_transfer_token_jni.h 中声明
void AInputTransferToken_release(
  AInputTransferToken *_Nullable aInputTransferToken
)

移除先前在原生代码中获取的引用。

自 API 级别 35 起可用。

AInputTransferToken_toJava

android/input_transfer_token_jni.h 中声明
jobject _Nonnull AInputTransferToken_toJava(
  JNIEnv *_Nonnull env,
  const AInputTransferToken *_Nonnull aInputTransferToken
)

返回封装 AInputTransferToken 的 Java InputTransferToken 对象。

aInputTransferToken 必须非空,返回的值是 android.window.InputTransferToken 的实例对象。

自 API 级别 35 起可用。

ANativeActivity_finish

android/native_activity.h 中声明
void ANativeActivity_finish(
  ANativeActivity *activity
)

结束给定的 activity。

将调用其 finish() 方法,导致其停止并销毁。请注意,此方法可以从任何线程调用;它将向进程的主线程发送消息,在该主线程中将执行 Java finish 调用。

ANativeActivity_hideSoftInput

android/native_activity.h 中声明
void ANativeActivity_hideSoftInput(
  ANativeActivity *activity,
  uint32_t flags
)

在给定 activity 中隐藏 IME(输入法编辑器)。

为给定 activity 调用 InputMethodManager.hideSoftInput()。请注意,此方法可以从任何线程调用;它将向进程的主线程发送消息,在该主线程中将执行 Java finish 调用。

ANativeActivity_setWindowFlags

android/native_activity.h 中声明
void ANativeActivity_setWindowFlags(
  ANativeActivity *activity,
  uint32_t addFlags,
  uint32_t removeFlags
)

更改给定 activity 的窗口标志。

调用给定 activity 的 getWindow().setFlags()。请注意,此方法可以从任何线程调用;它将向进程的主线程发送消息,在该主线程中将执行 Java finish 调用。请参阅 window.h 以获取标志常量。

ANativeActivity_setWindowFormat

android/native_activity.h 中声明
void ANativeActivity_setWindowFormat(
  ANativeActivity *activity,
  int32_t format
)

更改给定 activity 的窗口格式。

调用给定 activity 的 getWindow().setFormat()。请注意,此方法可以从任何线程调用;它将向进程的主线程发送消息,在该主线程中将执行 Java finish 调用。

ANativeActivity_showSoftInput

android/native_activity.h 中声明
void ANativeActivity_showSoftInput(
  ANativeActivity *activity,
  uint32_t flags
)

在给定 activity 中显示 IME(输入法编辑器)。

为给定 activity 调用 InputMethodManager.showSoftInput()。请注意,此方法可以从任何线程调用;它将向进程的主线程发送消息,在该主线程中将执行 Java finish 调用。

ANativeWindow_fromSurface

android/native_window_jni.h 中声明
ANativeWindow * ANativeWindow_fromSurface(
  JNIEnv *env,
  jobject surface
)

返回与 Java Surface 对象关联的 ANativeWindow,以便通过原生代码与其互动。

这将获取返回的 ANativeWindow 的引用;请务必在使用完毕后使用 ANativeWindow_release() 释放它,以免内存泄漏。

ANativeWindow_toSurface

android/native_window_jni.h 中声明
jobject ANativeWindow_toSurface(
  JNIEnv *env,
  ANativeWindow *window
)

返回派生自 ANativeWindow 的 Java Surface 对象,以便通过 Java 代码与其互动。

返回的 Java 对象会获取 ANativeWindow 的引用;在一般的 Java 对象生命周期内维护此引用;并在 Java 对象被垃圾回收时自动释放引用。

自 API 级别 26 起可用。

ASurfaceControl_acquire

android/surface_control.h 中声明
void ASurfaceControl_acquire(
  ASurfaceControl *_Nonnull surface_control
)

获取给定 ASurfaceControl 对象的引用。

这会阻止对象被删除,直到引用被移除。

要释放引用,请使用 ASurfaceControl_release 函数。

自 API 级别 31 起可用。

ASurfaceControl_create

android/surface_control.h 中声明
ASurfaceControl *_Nullable ASurfaceControl_create(
  ASurfaceControl *_Nonnull parent,
  const char *_Nonnull debug_name
)

请参阅 ASurfaceControl_createFromWindow。

自 API 级别 29 起可用。

ASurfaceControl_createFromWindow

android/surface_control.h 中声明
ASurfaceControl *_Nullable ASurfaceControl_createFromWindow(
  ANativeWindow *_Nonnull parent,
  const char *_Nonnull debug_name
)

创建以 ANativeWindow 或 ASurfaceControl 作为其父级的 ASurfaceControl。

debug_name 是与此 surface 关联的调试名称。它可用于在 SurfaceFlinger 的层树中标识此 surface。它不能为 null。

调用者拥有返回的 ASurfaceControl 的所有权,并且必须使用下面的 ASurfaceControl_release 释放它。

默认情况下,ASurfaceControl 将可见并显示任何提交的缓冲区。此外,默认的缓冲区提交控制可能会释放并且不显示在收到前一个缓冲区的回调之前提交的所有缓冲区。请参阅 ASurfaceTransaction_setVisibilityASurfaceTransaction_setEnableBackPressure 以更改创建后的默认行为。

自 API 级别 29 起可用。

ASurfaceControl_fromJava

android/surface_control_jni.h 中声明
ASurfaceControl *_Nonnull ASurfaceControl_fromJava(
  JNIEnv *_Nonnull env,
  jobject _Nonnull surfaceControlObj
)

返回由 Java SurfaceControl 对象封装的 ASurfaceControl。

调用者拥有返回的 ASurfaceControl 的所有权,并且必须使用 ASurfaceControl_release 释放它 * 。

surfaceControlObj 必须是 android.view.SurfaceControl 的非空实例,且 isValid() 必须为 true。

自 API 级别 34 起可用。

ASurfaceControl_release

android/surface_control.h 中声明
void ASurfaceControl_release(
  ASurfaceControl *_Nonnull surface_control
)

移除先前通过以下任一函数获取的引用:ASurfaceControl_createFromWindow、ASurfaceControl_create、ANativeWindow_acquire。只要其父级仍显示,surface 及其子级就可能仍显示。

自 API 级别 29 起可用。

ASurfaceTransactionStats_getASurfaceControls

android/surface_control.h 中声明
void ASurfaceTransactionStats_getASurfaceControls(
  ASurfaceTransactionStats *_Nonnull surface_transaction_stats,
  ASurfaceControl *_Nullable *_Nullable *_Nonnull outASurfaceControls,
  size_t *_Nonnull outASurfaceControlsSize
)

outASurfaceControls 返回在事务期间更新的 ASurfaceControl 指针数组。

可以通过 ASurfaceTransactionStats 函数查询 surface 的统计信息。客户端使用完数组后,必须通过调用 ASurfaceTransactionStats_releaseASurfaceControls 释放它。

自 API 级别 29 起可用。

outASurfaceControlsSize 返回 ASurfaceControls 数组的大小。

ASurfaceTransactionStats_getAcquireTime

android/surface_control.h 中声明
int64_t ASurfaceTransactionStats_getAcquireTime(
  ASurfaceTransactionStats *_Nonnull surface_transaction_stats,
  ASurfaceControl *_Nonnull surface_control
)

返回 CURRENT 缓冲区获取时的时间戳。

当缓冲区的 acquire_fence_fd 发出信号时,该缓冲区被认为是已获取的。在获取之前,缓冲区无法被锁定或呈现。如果未提供 acquire_fence_fd,此时间戳将设置为 -1。

自 API 级别 29 起可用。

已弃用。 这可能会返回 SIGNAL_PENDING,因为统计信息可能在获取栅栏发出信号之前到达,具体取决于内部时序差异。因此,调用者应使用传入 setBuffer 中的获取栅栏并查询信号时间。

ASurfaceTransactionStats_getLatchTime

android/surface_control.h 中声明
int64_t ASurfaceTransactionStats_getLatchTime(
  ASurfaceTransactionStats *_Nonnull surface_transaction_stats
)

返回框架锁定帧时的时间戳。

一旦帧被框架锁定,它将在随后的硬件垂直同步时呈现。

自 API 级别 29 起可用。

ASurfaceTransactionStats_getPresentFenceFd

android/surface_control.h 中声明
int ASurfaceTransactionStats_getPresentFenceFd(
  ASurfaceTransactionStats *_Nonnull surface_transaction_stats
)

返回一个同步栅栏,该栅栏在事务呈现时发出信号。

回调的接收方拥有栅栏的所有权,并负责关闭它。如果设备不支持 present 栅栏,则返回 -1。

此查询对于 ASurfaceTransaction_OnCommit 回调无效。

自 API 级别 29 起可用。

ASurfaceTransactionStats_getPreviousReleaseFenceFd

android/surface_control.h 中声明
int ASurfaceTransactionStats_getPreviousReleaseFenceFd(
  ASurfaceTransactionStats *_Nonnull surface_transaction_stats,
  ASurfaceControl *_Nonnull surface_control
)

返回用于指示在此 surface 上设置的 PREVIOUS 缓冲区已释放的栅栏。

如果此栅栏有效 (>=0),则 PREVIOUS 缓冲区尚未释放,栅栏将在 PREVIOUS 缓冲区释放时发出信号。如果栅栏为 -1,则 PREVIOUS 缓冲区已释放。回调的接收方拥有 previousReleaseFenceFd 的所有权,并负责关闭它。

每次通过 ASurfaceTransaction_setBuffer() 在应用的事务上设置缓冲区时,框架会获取此缓冲区的引用。框架将缓冲区添加到特定 surface 的操作视为一个唯一的引用。当事务更新或从 surface 移除缓冲区,或从树中移除 surface 本身时,保证在此事务的 OnComplete 回调中释放此引用。为此 surface 在回调中提供的 ASurfaceControlStats 可能包含一个可选的栅栏,必须在假定释放引用之前发出信号。

客户端必须确保在尝试重复使用此缓冲区之前释放缓冲区上的所有待处理引用,否则可能会发生同步错误。

此查询对于 ASurfaceTransaction_OnCommit 回调无效。

自 API 级别 29 起可用。

ASurfaceTransactionStats_releaseASurfaceControls

android/surface_control.h 中声明
void ASurfaceTransactionStats_releaseASurfaceControls(
  ASurfaceControl *_Nonnull *_Nonnull surface_controls
)

释放由 ASurfaceTransactionStats_getASurfaceControls() 返回的 ASurfaceControl 数组。

自 API 级别 29 起可用。

ASurfaceTransaction_apply

android/surface_control.h 中声明
void ASurfaceTransaction_apply(
  ASurfaceTransaction *_Nonnull transaction
)

应用在 transaction 中累积的更新。

请注意,保证事务是原子化应用的。在同一线程上应用的事务也保证按顺序应用。

自 API 级别 29 起可用。

ASurfaceTransaction_clearFrameRate

android/surface_control.h 中声明
void ASurfaceTransaction_clearFrameRate(
  ASurfaceTransaction *_Nonnull transaction,
  ASurfaceControl *_Nonnull surface_control
)

清除为 surface_control 设置的帧率。

这等效于调用 ASurfaceTransaction_setFrameRateWithChangeStrategy( transaction, 0, compatibility, changeFrameRateStrategy)。

使用此 API 不会直接影响应用的帧生成流水线。但是,由于系统可能会更改显示刷新率,调用此函数可能会导致 Choreographer 回调时序发生变化,以及系统将缓冲区释放回应用的时间间隔发生变化。

请参阅 ASurfaceTransaction_setFrameRateWithChangeStrategy()

您可以使用 AChoreographer_registerRefreshRateCallback 注册刷新率的变化。

请参阅 ASurfaceTransaction_setFrameRateWithChangeStrategy()

自 API 级别 34 起可用。

ASurfaceTransaction_create

android/surface_control.h 中声明
ASurfaceTransaction *_Nonnull ASurfaceTransaction_create()

调用者拥有该事务,并且必须使用下面的 ASurfaceTransaction_delete() 函数释放它。

自 API 级别 29 起可用。

ASurfaceTransaction_delete

android/surface_control.h 中声明
void ASurfaceTransaction_delete(
  ASurfaceTransaction *_Nullable transaction
)

销毁 transaction 对象。

自 API 级别 29 起可用。

ASurfaceTransaction_fromJava

android/surface_control_jni.h 中声明
ASurfaceTransaction *_Nonnull ASurfaceTransaction_fromJava(
  JNIEnv *_Nonnull env,
  jobject _Nonnull transactionObj
)

返回由 Java Transaction 对象封装的 ASurfaceTransaction。

返回的 ASurfaceTransaction 仍然由 Java Transaction 对象拥有,并且仅在 Java Transaction 对象存活期间有效。特别是,返回的事务不得使用 ASurfaceTransaction_delete 删除。

transactionObj 必须是 android.view.SurfaceControl.Transaction 的非空实例,并且不得已调用 close()。

自 API 级别 34 起可用。

ASurfaceTransaction_reparent

android/surface_control.h 中声明
void ASurfaceTransaction_reparent(
  ASurfaceTransaction *_Nonnull transaction,
  ASurfaceControl *_Nonnull surface_control,
  ASurfaceControl *_Nullable new_parent
)

surface_control 从其旧的父级重新指向 new_parent surface control。

重新指向父级的 surface_control 的任何子级将仍为 surface_control 的子级。

new_parent 可以为 null。父级为 null 的 Surface control 不会显示在显示屏上。

自 API 级别 29 起可用。

ASurfaceTransaction_setBuffer

android/surface_control.h 中声明
void ASurfaceTransaction_setBuffer(
  ASurfaceTransaction *_Nonnull transaction,
  ASurfaceControl *_Nonnull surface_control,
  AHardwareBuffer *_Nonnull buffer,
  int acquire_fence_fd
)

更新为 surface_control 显示的 AHardwareBuffer。

如果不是 -1,acquire_fence_fd 应该是一个文件描述符,当缓冲区的所有待处理工作完成且缓冲区可以安全读取时,该文件描述符会发出信号。

框架拥有传入的 acquire_fence_fd 的所有权,并负责关闭它。

请注意,缓冲区必须使用 AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE 分配,因为 surface control 可能会使用 GPU 进行合成。

从 API 级别 36 开始,首选使用 ASurfaceTransaction_setBufferWithRelease 来设置缓冲区和一个回调,该回调将在缓冲区可供重复使用时被调用。

自 API 级别 29 起可用。

ASurfaceTransaction_setBufferAlpha

android/surface_control.h 中声明
void ASurfaceTransaction_setBufferAlpha(
  ASurfaceTransaction *_Nonnull transaction,
  ASurfaceControl *_Nonnull surface_control,
  float alpha
)

设置缓冲区的 alpha。

它使用预乘混合(premultiplied blending)。

alpha 必须在 0.0 到 1.0 之间。

自 API 级别 29 起可用。

ASurfaceTransaction_setBufferDataSpace

android/surface_control.h 中声明
void ASurfaceTransaction_setBufferDataSpace(
  ASurfaceTransaction *_Nonnull transaction,
  ASurfaceControl *_Nonnull surface_control,
  enum ADataSpace data_space
)

设置 surface_control 缓冲区的色彩空间。

如果未设置色彩空间,surface control 默认为 ADATASPACE_SRGB。

自 API 级别 29 起可用。

ASurfaceTransaction_setBufferTransform

android/surface_control.h 中声明
void ASurfaceTransaction_setBufferTransform(
  ASurfaceTransaction *_Nonnull transaction,
  ASurfaceControl *_Nonnull surface_control,
  int32_t transform
)

自 API 级别 31 起可用。

详细信息
参数
transform
源矩形应用于缓冲区后应用的变换。对于无变换,应将此参数设置为 0。要指定变换,请使用 NATIVE_WINDOW_TRANSFORM_* 枚举。

ASurfaceTransaction_setBufferTransparency

android/surface_control.h 中声明
void ASurfaceTransaction_setBufferTransparency(
  ASurfaceTransaction *_Nonnull transaction,
  ASurfaceControl *_Nonnull surface_control,
  enum ASurfaceTransactionTransparency transparency
)

更新与此 surface 关联的缓冲区内容是否完全不透明。

如果为 true,缓冲区内的每个内容像素都必须不透明,否则可能发生视觉错误。

自 API 级别 29 起可用。

ASurfaceTransaction_setBufferWithRelease

android/surface_control.h 中声明
void ASurfaceTransaction_setBufferWithRelease(
  ASurfaceTransaction *_Nonnull transaction,
  ASurfaceControl *_Nonnull surface_control,
  AHardwareBuffer *_Nonnull buffer,
  int acquire_fence_fd,
  void *_Null_unspecified context,
  ASurfaceTransaction_OnBufferRelease _Nonnull func
)

更新为 surface_control 显示的 AHardwareBuffer。

如果不是 -1,acquire_fence_fd 应该是一个文件描述符,当缓冲区的所有待处理工作完成且缓冲区可以安全读取时,该文件描述符会发出信号。

框架拥有传入的 acquire_fence_fd 的所有权,并负责关闭它。

请注意,缓冲区必须使用 AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE 分配,因为 surface control 可能会使用 GPU 进行合成。

当缓冲区可供重复使用时,将调用 ASurfaceTransaction_OnBufferRelease 回调。如果缓冲区为 null,则不会调用回调。

自 API 级别 36 起可用。

ASurfaceTransaction_setColor

android/surface_control.h 中声明
void ASurfaceTransaction_setColor(
  ASurfaceTransaction *_Nonnull transaction,
  ASurfaceControl *_Nonnull surface_control,
  float r,
  float g,
  float b,
  float alpha,
  enum ADataSpace dataspace
)

更新 surface_control 的颜色。

这将使 ASurfaceControl 的背景颜色在 surface 的透明区域中可见。颜色 rgb 必须在 dataspace 有效的范围内。dataspacealpha 将是为背景颜色层设置的色彩空间和 alpha。

自 API 级别 29 起可用。

ASurfaceTransaction_setCrop

android/surface_control.h 中声明
void ASurfaceTransaction_setCrop(
  ASurfaceTransaction *_Nonnull transaction,
  ASurfaceControl *_Nonnull surface_control,
  const ARect *_Nonnull crop
)

将 surface 及其子级限定到指定的边界内。

裁剪和缓冲区大小将用于确定 surface 的边界。如果未指定裁剪且 surface 没有缓冲区,则 surface 边界仅受其父边界大小的限制。

自 API 级别 31 起可用。

详细信息
参数
crop
要应用的裁剪边界。

ASurfaceTransaction_setDamageRegion

android/surface_control.h 中声明
void ASurfaceTransaction_setDamageRegion(
  ASurfaceTransaction *_Nonnull transaction,
  ASurfaceControl *_Nonnull surface_control,
  const ARect *_Nullable rects,
  uint32_t count
)

更新此事务中在此 surface 上更新的内容区域。

如果未指定,则假定整个 surface 已损坏。

自 API 级别 29 起可用。

ASurfaceTransaction_setDesiredHdrHeadroom

android/surface_control.h 中声明
void ASurfaceTransaction_setDesiredHdrHeadroom(
  ASurfaceTransaction *_Nonnull transaction,
  ASurfaceControl *_Nonnull surface_control,
  float desiredHeadroom
)

为层设置所需的 HDR 余量。

请参阅:ASurfaceTransaction_setExtendedRangeBrightness,对于符合 HLG 或 HDR10 等 HDR 标准的格式,优先使用此 API,这些格式在生成缓冲区时不会将 HDR/SDR 比率作为一部分进行通信。

虽然请求较大的所需比率会产生最大的动态范围,但自愿减少请求的范围有助于延长电池续航时间,并且可以通过确保将更大的位深分配给使用的亮度范围来提高质量。

详细信息
参数
surface_control
正在指定其所需 HDR 余量的层
desiredHeadroom
所需的 HDR/SDR 比率,表示为 peakHdrBrightnessInNits / targetSdrWhitePointInNits。这可用于传达面板的最大所需亮度范围。系统可能无法或可能选择不提供请求的范围。

默认值为 0.0f,表示系统将为此 surface control 的内容选择最佳余量。通常,这意味着 HLG/PQ 编码内容将以大于 1.0 的 HDR 余量显示。

在调用 ASurfaceTransaction_setExtendedRangeBrightness 之后调用时,desiredHeadroom 将覆盖 ASurfaceTransaction_setExtendedRangeBrightness 提供的 desiredRatio。反之,在调用 ASurfaceTransaction_setExtendedRangeBrightness 之前调用时,ASurfaceTransaction_setExtendedRangeBrightness 提供的 desiredRatio 将覆盖 desiredHeadroom。

必须是有限的 && >= 1.0f,或为 0.0f 表示没有所需的净空。

自 API 级别 35 起可用。

ASurfaceTransaction_setDesiredPresentTime

android/surface_control.h 中声明
void ASurfaceTransaction_setDesiredPresentTime(
  ASurfaceTransaction *_Nonnull transaction,
  int64_t desiredPresentTime
)

为此事务指定 desiredPresentTime。

框架将尝试在指定时间或之后呈现事务。

即使应用请求更早的呈现时间,事务也只有在其所有获取围栏都已发出信号后才会呈现。

如果较早的事务的所需呈现时间为 x,而较晚的事务的所需呈现时间在 x 之前,则较晚的事务不会抢占较早的事务。

自 API 级别 29 起可用。

ASurfaceTransaction_setEnableBackPressure

android/surface_control.h 中声明
void ASurfaceTransaction_setEnableBackPressure(
  ASurfaceTransaction *_Nonnull transaction,
  ASurfaceControl *_Nonnull surface_control,
  bool enableBackPressure
)

指示是否启用对提交到给定 SurfaceControl 的缓冲区的背压(backpressure)。

默认情况下,背压是禁用的,这意味着在收到前一个缓冲区的回调之前提交缓冲区可能导致该缓冲区被“丢弃”。在您选择低延迟的情况下,这可能是期望的行为!我们已经准备好了一个新缓冲区,为什么不显示它呢?

当背压启用时,每个缓冲区都需要在其被释放并传递回调之前呈现(除非整个 SurfaceControl 被移除)。

大多数应用内部可能都有某种背压机制,例如,在开始帧 N 之前等待来自帧 N-2 的回调。在高刷新率场景中,SurfaceFlinger 完成帧 N-1(并因此释放缓冲区 N-2)与开始帧 N 之间可能没有太多时间。这意味着您的应用可能没有足够的时间在回调中做出响应。在这种情况下,使用此标志并更早地推送缓冲区以进行服务器端排队将是有利的。

自 API 级别 31 起可用。

详细信息
参数
transaction
要进行更改的事务。
surface_control
用于控制缓冲区背压行为的 ASurfaceControl。
enableBackPressure
是否启用背压。

ASurfaceTransaction_setExtendedRangeBrightness

android/surface_control.h 中声明
void ASurfaceTransaction_setExtendedRangeBrightness(
  ASurfaceTransaction *_Nonnull transaction,
  ASurfaceControl *_Nonnull surface_control,
  float currentBufferRatio,
  float desiredRatio
)

为层设置所需的扩展范围亮度。

这仅适用于其 dataspace 设置了 RANGE_EXTENDED 的图层。请参阅:ASurfaceTransaction_setDesiredHdrHeadroom,对于在生成缓冲区时将 HDR/SDR 比率编码在内的格式,优先使用此 API。

默认值为 1.0f。

详细信息
参数
surface_control
正在指定扩展范围亮度的图层。
currentBufferRatio
当前缓冲区的当前 HDR/SDR 比率,表示为 peakHdrBrightnessInNits / targetSdrWhitePointInNits。例如,如果缓冲区是以目标 SDR 白点 100 尼特和最大显示亮度 200 尼特渲染的,则应将其设置为 2.0f。

编码自身亮度范围的传输函数,例如 HLG 或 PQ,也应将此设置为 1.0f,并转而通过诸如 CTA861_3 或 SMPTE2086 之类的元数据来传达扩展内容亮度信息。

必须是有限的 && >= 1.0f。

虽然请求较大的所需比率会产生最大的动态范围,但自愿减少请求的范围有助于延长电池续航时间,并且可以通过确保将更大的位深分配给使用的亮度范围来提高质量。

详细信息
参数
desiredRatio
所需的 HDR/SDR 比率,表示为 peakHdrBrightnessInNits / targetSdrWhitePointInNits。这可用于传达所需的最大亮度范围。这类似于其他 HDR 元数据格式中的“最大亮度”值,但表示为目标 SDR 白点与最大显示亮度的比率。系统可能无法或选择不提供所请求的范围。

默认值为 1.0f,表示未在使用扩展范围亮度,因此最终的 SDR 或 HDR 行为将完全由所使用的 dataspace 决定(即,通常为 SDR,但 PQ 或 HLG 传输函数仍会产生 HDR)。

在调用 ASurfaceTransaction_setDesiredHdrHeadroom 之后调用时,desiredRatio 将覆盖 ASurfaceTransaction_setDesiredHdrHeadroom 提供的 desiredHeadroom。反之,在调用 ASurfaceTransaction_setDesiredHdrHeadroom 之前调用时,ASurfaceTransaction_setDesiredHdrHeadroom 提供的 desiredHeadroom 将覆盖 desiredRatio。

                 Must be finite && >= 1.0f

自 API 级别 34 起可用。

ASurfaceTransaction_setFrameRate

android/surface_control.h 中声明
void ASurfaceTransaction_setFrameRate(
  ASurfaceTransaction *_Nonnull transaction,
  ASurfaceControl *_Nonnull surface_control,
  float frameRate,
  int8_t compatibility
)

与 ASurfaceTransaction_setFrameRateWithChangeStrategy(transaction, 0, compatibility, changeFrameRateStrategy) 相同。

请参阅 ASurfaceTransaction_setFrameRateWithChangeStrategy()

自 API 级别 30 起可用。

ASurfaceTransaction_setFrameRateWithChangeStrategy

android/surface_control.h 中声明
void ASurfaceTransaction_setFrameRateWithChangeStrategy(
  ASurfaceTransaction *_Nonnull transaction,
  ASurfaceControl *_Nonnull surface_control,
  float frameRate,
  int8_t compatibility,
  int8_t changeFrameRateStrategy
)

surface_control 设置预期帧率。

在能够以不同刷新率运行显示的设备上,系统可能会选择显示刷新率以更好地匹配此图面的帧率。使用此 API 不会直接影响应用的帧生产管线。但是,由于系统可能会更改显示刷新率,调用此函数可能会导致 Choreographer 回调时序发生变化,以及系统将缓冲区释放回应用的时间间隔发生变化。

您可以使用 AChoreographer_registerRefreshRateCallback 注册刷新率的变化。

请参阅 ASurfaceTransaction_clearFrameRate()

自 API 级别 31 起可用。

详细信息
参数
frameRate
是此图面的预期帧率,单位为每秒帧数。0 是一个特殊值,表示应用将接受系统对显示帧率的选择,这也是未调用此函数时的默认行为。frameRate 参数不必是此设备显示的有效刷新率 - 例如,将 30fps 传递给只能以 60fps 运行显示的设备是没问题的。
compatibility
此图面的帧率兼容性。兼容性值可能会影响系统选择显示帧率。要指定兼容性,请使用 ANATIVEWINDOW_FRAME_RATE_COMPATIBILITY_* 枚举。当 frameRate 为 0 时,此参数将被忽略。
changeFrameRateStrategy
此图面导致的显示刷新率转换是否应是无缝的。无缝转换是指没有任何视觉中断的转换,例如持续一两秒的黑屏。请参阅 ANATIVEWINDOW_CHANGE_FRAME_RATE_* 值。当 frameRate 为 0 时,此参数将被忽略。

ASurfaceTransaction_setFrameTimeline

android/surface_control.h 中声明
void ASurfaceTransaction_setFrameTimeline(
  ASurfaceTransaction *_Nonnull transaction,
  AVsyncId vsyncId
)

设置在 SurfaceFlinger 中使用的帧时间轴。

应根据应用在渲染帧时能够满足的帧截止时间以及应用的所需呈现时间来选择帧时间轴。通过设置帧时间轴,SurfaceFlinger 会尝试在相应的预期呈现时间呈现该帧。

要接收帧时间轴,必须使用 AChoreographer_postVsyncCallback() 向 Choreographer 发布回调。然后可以使用 AChoreographerFrameCallbackData_getFrameTimelineVsyncId() 从回调负载中提取 vsyncId

自 API 级别 33 起可用。

详细信息
参数
vsyncId
从 AChoreographer 收到的 vsync ID,将帧的呈现目标设置为要渲染的帧的相应预期呈现时间和截止时间。陈旧或无效的值将被忽略。

ASurfaceTransaction_setGeometry

android/surface_control.h 中声明
void ASurfaceTransaction_setGeometry(
  ASurfaceTransaction *_Nonnull transaction,
  ASurfaceControl *_Nonnull surface_control,
  const ARect *_Nonnull source,
  const ARect *_Nonnull destination,
  int32_t transform
)

自 API 级别 29 起可用。

详细信息
参数
source
缓冲区内容中要在图面区域内渲染的子矩形。图面的源矩形由其当前缓冲区的边界裁剪。源矩形的宽度和高度必须 > 0。
destination
指定此图面在其父级空间中绘制的矩形。源矩形后边界会缩放以适应目标矩形。图面的目标矩形由其父级的边界裁剪。目标矩形的宽度和高度必须 > 0。
transform
源矩形应用于缓冲区后应用的变换。对于无变换,应将此参数设置为 0。要指定变换,请使用 NATIVE_WINDOW_TRANSFORM_* 枚举。

已弃用。 请改用 setCrop、setPosition、setBufferTransform 和 setScale。这些函数提供明确定义的行为,并允许应用进行更多控制。它还允许调用者在不同时间设置不同的属性,而无需一次指定所有所需的属性。

ASurfaceTransaction_setHdrMetadata_cta861_3

android/surface_control.h 中声明
void ASurfaceTransaction_setHdrMetadata_cta861_3(
  ASurfaceTransaction *_Nonnull transaction,
  ASurfaceControl *_Nonnull surface_control,
  struct AHdrMetadata_cta861_3 *_Nullable metadata
)

在 surface 上设置 CTA 861.3“HDR Static Metadata Extension”静态元数据。

metadata 设置为 null 时,框架在渲染图面缓冲区时不会使用任何 cta861.3 元数据。

自 API 级别 29 起可用。

ASurfaceTransaction_setHdrMetadata_smpte2086

android/surface_control.h 中声明
void ASurfaceTransaction_setHdrMetadata_smpte2086(
  ASurfaceTransaction *_Nonnull transaction,
  ASurfaceControl *_Nonnull surface_control,
  struct AHdrMetadata_smpte2086 *_Nullable metadata
)

SMPTE ST 2086“Mastering Display Color Volume”静态元数据。

metadata 设置为 null 时,框架在渲染图面缓冲区时不会使用任何 smpte2086 元数据。

自 API 级别 29 起可用。

ASurfaceTransaction_setOnCommit

android/surface_control.h 中声明
void ASurfaceTransaction_setOnCommit(
  ASurfaceTransaction *_Nonnull transaction,
  void *_Null_unspecified context,
  ASurfaceTransaction_OnCommit _Nonnull func
)

设置回调,该回调在应用此事务中的更新并准备好呈现时被调用。

此回调将在 ASurfaceTransaction_OnComplete 回调之前被调用。

自 API 级别 31 起可用。

ASurfaceTransaction_setOnComplete

android/surface_control.h 中声明
void ASurfaceTransaction_setOnComplete(
  ASurfaceTransaction *_Nonnull transaction,
  void *_Null_unspecified context,
  ASurfaceTransaction_OnComplete _Nonnull func
)

设置回调,该回调在呈现此事务中的更新时被调用。

有关回调语义和数据的详细信息,请参阅上面的 ASurfaceTransaction_OnComplete 声明中的注释。

自 API 级别 29 起可用。

ASurfaceTransaction_setPosition

android/surface_control.h 中声明
void ASurfaceTransaction_setPosition(
  ASurfaceTransaction *_Nonnull transaction,
  ASurfaceControl *_Nonnull surface_control,
  int32_t x,
  int32_t y
)

指定 surface 在父级空间中绘制的位置。

自 API 级别 31 起可用。

详细信息
参数
x
渲染图面的 x 位置。
y
渲染图面的 y 位置。

ASurfaceTransaction_setScale

android/surface_control.h 中声明
void ASurfaceTransaction_setScale(
  ASurfaceTransaction *_Nonnull transaction,
  ASurfaceControl *_Nonnull surface_control,
  float xScale,
  float yScale
)

以 (0, 0) 为缩放中心点,设置 surface 的 x 和 y 缩放比例。

自 API 级别 31 起可用。

详细信息
参数
xScale
x 方向上的缩放比例。必须大于 0。
yScale
y 方向上的缩放比例。必须大于 0。

ASurfaceTransaction_setVisibility

android/surface_control.h 中声明
void ASurfaceTransaction_setVisibility(
  ASurfaceTransaction *_Nonnull transaction,
  ASurfaceControl *_Nonnull surface_control,
  enum ASurfaceTransactionVisibility visibility
)

更新 surface_control 的可见性。

如果 show 设置为 ASURFACE_TRANSACTION_VISIBILITY_HIDE,则 surface_control 及其子树中的所有图面都将被隐藏。

自 API 级别 29 起可用。

ASurfaceTransaction_setZOrder

android/surface_control.h 中声明
void ASurfaceTransaction_setZOrder(
  ASurfaceTransaction *_Nonnull transaction,
  ASurfaceControl *_Nonnull surface_control,
  int32_t z_order
)

更新 surface_control 的 z 顺序索引。

请注意,图面的 z 顺序是相对于此图面的同级图面而言的。具有相同 z 顺序的同级图面的行为是未定义的。

Z 顺序范围为 MIN_INT32 到 MAX_INT32。图层的默认 z 顺序索引为 0。

自 API 级别 29 起可用。