Поиск…


Использование surfaceView в ng2-TNS-Android: шаг за шагом

Например, вы хотите использовать surfaceView в ng2-nativescript. Поскольку у нас нет surfaceView в nativescript, мы должны использовать placeholder .

сначала мы должны импортировать требования:

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

затем добавьте местозаполнитель в ваш html-файл:

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

Добавьте этот метод в свой класс:

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

typescript не знает, что такое android и мы должны добавить файлы декларации платформы, следуйте этому ответу, чтобы добавить их.

из-за проблемы в текущей версии ng2-nativescript мы должны сделать дополнительную работу:

замените местозаполнитель на:

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

Импорт OnInit:

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

ваш класс должен реализовать OnInit

export class AppComponent implements OnInit

и добавьте эти строки в свой класс:

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

теперь у вас есть surfaceView в вашем приложении nativescript :)

Способы вызова SurfaceView

Например, вы хотите вызвать getHolder() :

добавьте переменную и загруженное событие в ваш заполнитель следующим образом:

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

и добавьте метод onLoaded в ваш класс:

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

ВНИМАНИЕ :

Не гарантируется, что свойство android ( element.android ) будет доступно в ngAfterViewInit поэтому ngAfterViewInit этого мы использовали loaded событие.

Использование surfaceView в ng2-TNS-Android: пример готовый

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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow