Desenvolver UI espacial para apps baseados em visualizações do Android

Dispositivos XR aplicáveis
Estas orientações ajudam você a criar experiências para esses tipos de dispositivos de XR.
Headsets de realidade estendida
Óculos XR com fio

Usar o framework Android Jetpack Compose é a melhor maneira de aproveitar os avanços mais recentes no desenvolvimento de interface do Android e verificar se seu aplicativo continua atualizado com as práticas recomendadas do setor.

No entanto, se você não fez a migração e está trabalhando para espacializar um app baseado em Android Views, há algumas abordagens que podem ser usadas.

Reutilizar suas visualizações atuais em SpatialPanels

Embora os SpatialPanels façam parte da biblioteca Jetpack Compose para XR, eles também aceitam Views. Ao usar Subspace na sua MainActivity, coloque uma visualização em um SpatialPanel, conforme mostrado no exemplo a seguir.

setContent {
    Subspace {
        SpatialPanel(
            modifier = SubspaceModifier.height(500.dp).width(500.dp).depth(25.dp)
        ) { MyCustomView(this@ActivityWithSubspaceContent) }
    }
}

Usar APIs de interoperabilidade do Android Views e do Compose

Consulte as orientações sobre a interoperabilidade entre Views e Compose. Esta documentação aborda o uso desses frameworks juntos e contém links para exemplos de código que você pode usar.

Usar uma ComposeView para adicionar painéis espaciais e orbitadores a um fragmento atual

Use um ComposeView no layout XML para adicionar elementos combináveis e criar novos conteúdos de RV. Use a vinculação de visualizações ou o findViewById para encontrar o ComposeView na função onCreateView().

Leia mais sobre as orientações do ComposeView.

override fun onCreateView(
    inflater: LayoutInflater,
    container: ViewGroup?,
    savedInstanceState: Bundle?
): View {
    val view = inflater.inflate(R.layout.example_fragment, container, false)
    view.findViewById<ComposeView>(R.id.compose_view).apply {
        // Dispose of the Composition when the view's LifecycleOwner
        // is destroyed
        setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
        setContent {
            // In Compose world
            SpatialPanel(SubspaceModifier.height(500.dp).width(500.dp)) {
                Text("Spatial Panel with Orbiter")
            }
        }
    }
    return view
}

Trabalhar diretamente com a biblioteca Jetpack SceneCore

O Compose para XR é criado com base no Jetpack SceneCore. Se você estiver espacializando um app baseado em Views, poderá continuar usando o código de interface atual no Compose para XR ou trabalhar diretamente com o Session do Jetpack SceneCore.

É possível criar painéis diretamente do SceneCore usando PanelEntity. Defina o tamanho do painel em metros usando dimensions ou em pixels usando pixelDimensions. Você pode tornar os painéis móveis ou redimensionáveis usando os componentes correspondentes. Para mais informações, consulte Adicionar comportamento comum a entidades.

val panelContent = MyCustomView(this)
val panelEntity = PanelEntity.create(
    session = xrSession,
    view = panelContent,
    pixelDimensions = IntSize2d(500, 500),
    name = "panel entity"
)