Um SubspaceModifier é semelhante a um modificador do Compose para elementos combináveis
em um Subspace. Um SubspaceModifier permite manipular elementos combináveis no espaço 3D,
ajudando você a posicionar, girar e adicionar comportamentos aos nós de layout 3D.
Layout
Por padrão, um Subspace é limitado pelo espaço recomendado para visualizar um
app. Esses limites são usados ao medir o layout dos componentes do subespaço, semelhante aos limites em layouts 2D do Compose.
Preencher limites
Os modificadores fillMaxSize, fillMaxWidth, fillMaxHeight e
fillMaxDepth fazem com que o conteúdo preencha (parcialmente) os limites do elemento pai.
O uso de modificadores de preenchimento ajuda o app a organizar o conteúdo de forma independente das características de exibição do dispositivo XR.
Definir o tamanho e o tamanho obrigatório
Os modificadores size, width, height e depth
declaram o tamanho preferencial do conteúdo. Para declarar o tamanho exato do
conteúdo, use requiredSize, requiredWidth,
requiredHeight e requiredDepth. Essas unidades precisam ser especificadas
em dp. Para converter de metros em dp, use Meter.toDp().
Posicionar elementos combináveis
offset
O modificador offset move o elemento combinável no espaço 3D ao longo dos eixos x, y
e z. Essas unidades precisam ser especificadas em dp. Para converter de metros em
dp, use Meter.toDp().
rotate
O modificador rotate gira o elemento combinável no espaço. É possível
especificar a direção e a quantidade de rotação de diferentes maneiras:
- Usando inclinação, guinada e rotação, que especificam a rotação em torno dos eixos
x,yez, respectivamente. - Usando um
axisAngle, que é umVector3que representa o eixo de rotação, e o número de graus em que ele precisa ser girado, - Usando um
Quaternionque representa a rotação.
rotateToLookAtUser
O modificador rotateToLookAtUser gira continuamente
o conteúdo para que ele fique sempre voltado para o usuário. Também é possível usar esse modificador
para conseguir um efeito de "outdoor", em que o conteúdo gira para ficar de frente para o usuário no
eixo Y, mas permanece na vertical e alinhado com a gravidade. Para fazer isso,
combine o modificador rotateToLookAtUser com
o modificador gravityAligned.
Mover e redimensionar elementos combináveis
Permita que os usuários manipulem diretamente a posição e o tamanho dos objetos no espaço 3D.
Mover elementos
Quando o modificador movable está presente e ativado, são mostrados controles de interface arrastáveis que permitem ao usuário mover o elemento no espaço 3D. É
possível aplicar modificadores movable a um Subspace inteiro, a componentes de layout
espacial (como SpatialRow e SpatialColumn) e
a componentes individuais (como SpatialPanel e SpatialGltfModel).
O comportamento específico desse movimento é definido pelo movePolicy fornecido:
MovePolicy.Default(ouMovePolicy.system()): o sistema processa o movimento por completo e calcula e aplica automaticamente a nova pose e escala com base na entrada do usuário.MovePolicy.custom(): o sistema calcula oPosede destino com base na entrada, mas não o aplica automaticamente ao elemento associado. Isso é útil para restringir o movimento ou criar um movimento personalizado no app.MovePolicy.anchor(): permite que o usuário ajuste e fixe o elemento móvel em planos reais detectados.
Elementos combináveis de âncora
Para fixar um subespaço combinável móvel em superfícies do mundo real, transmita
MovePolicy.anchor() para o modificador movable.
Essa política permite que os usuários fixem elementos (como SpatialPanel e
SpatialGltfModel) em superfícies físicas, como mesas, paredes ou pisos.
É possível filtrar os planos detectados em que um elemento pode ser fixado usando os seguintes parâmetros (se deixados em branco, o elemento pode ser fixado em qualquer plano detectado):
anchorPlaneOrientations: um conjunto de valoresPlaneOrientation(Horizontal,VerticalouAny).anchorPlaneSemantics: um conjunto de valoresPlaneSemantic(Wall,Floor,Ceiling,TableouAny).
Redimensionar elementos
Quando o modificador resizable() está presente e ativado, os controles de interface
são mostrados para que o usuário possa redimensionar o elemento no espaço 3D. O
comportamento específico do redimensionamento é definido pelo resizePolicy fornecido:
ResizePolicy.default(): o sistema processa automaticamente o gesto de redimensionamento e aplica as novas dimensões ao conteúdo.ResizePolicy.custom(): o sistema fornece umSpatialResizeEvente não aplica automaticamente o resultado do redimensionamento ao elemento associado.
Mudar a aparência de elementos que podem ser compostos
alpha
O modificador alpha define a opacidade do elemento e dos filhos dele,
em que 0f representa totalmente transparente e 1.0f representa totalmente opaco.
scale
O modificador scale dimensiona o conteúdo do elemento combinável ao longo dos
eixos horizontal, vertical e de profundidade.
Testes e acessibilidade
semantics
O modificador semantics adiciona semântica ao nó de layout para uso em
testes e acessibilidade. Consulte Semântica no Jetpack Compose e
SemanticsModifier.
testTag
O modificador testTag é uma abreviação de
SemanticsPropertyReceiver.testTag, que permite que os frameworks de teste encontrem
o elemento nos testes.