Buscar..


Usando surfaceView en ng2-TNS-Android: paso a paso

Por ejemplo, desea utilizar surfaceView en ng2-nativescript. Como no tenemos surfaceView en nativescript, debemos usar el placeholder .

Primero debemos importar los requisitos:

import {Component} from "@angular/core";
import placeholder = require("ui/placeholder");
let application= require("application");

a continuación, agregue el marcador de posición a su archivo html:

<Placeholder (creatingView)="creatingView($event)"></Placeholder>

Agrega este método a tu clase:

public creatingView(args: any) {
  var nativeView = new android.view.SurfaceView(application.android.currentContext);
  args.view = nativeView;
}

typescript no sabe qué es android y debemos agregar los archivos de declaración de plataforma siguiendo esta Respuesta para agregarlos.

debido a un problema en la versión actual de ng2-nativescript, deberíamos hacer un trabajo adicional:

cambiar el marcador de posición a:

<Placeholder  *ngIf="init" (creatingView)="creatingView($event)"></Placeholder>

Importar OnInit:

import {Component,OnInit} from "@angular/core";

su clase debe implementar OnInit

export class AppComponent implements OnInit

y agrega estas líneas a tu clase:

public init: boolean = false;
ngOnInit() {
    this.init = true;
}

ahora tienes un surfaceView en tu aplicación nativescript :)

Métodos de llamada de SurfaceView

Por ejemplo, desea llamar a getHolder() :

agrega una variable y un evento cargado a tu marcador de posición como este:

  <Placeholder  #surface *ngIf="init" (creatingView)="creatingView($event)" (loaded)="onLoaded(surface)"></Placeholder>

y agrega el método onLoaded a tu clase:

 onLoaded(element){
  let mSurface = element.android;
  let holder =  mSurface.getHolder();
}

ATENCION :

No se garantiza que la propiedad de android ( element.android ) esté disponible en ngAfterViewInit así que usamos un evento loaded lugar de eso.

Uso de surfaceView en ng2-TNS-Android: ejemplo completo listo

app.component.ts:

import {Component,OnInit} from "@angular/core";
import placeholder = require("ui/placeholder");
let application= require("application");

@Component({
    selector: "my-app",
    templateUrl: "app.component.html",
})
export class AppComponent implements OnInit{

  public creatingView(args: any) {
    var nativeView = new android.view.SurfaceView(application.android.currentContext);
    args.view = nativeView;
  }

  onLoaded(element){
    let mSurface = element.android;
    let holder =  mSurface.getHolder();
  }

  public init: boolean = false;
    ngOnInit() {
        this.init = true;
    }
}

app.component.html:

<StackLayout>
   <Placeholder  #surface *ngIf="init" (creatingView)="creatingView($event)" (loaded)="onLoaded(surface)"></Placeholder>
</StackLayout>


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow