在 ng2-TNS-Android 中逐步使用 surfaceView

例如,你想在 ng2-nativescript 中使用 surfaceView。由於我們在 nativescript 中沒有 surfaceView,我們應該使用 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;
}

現在你的 nativescript 應用程式中有一個 surfaceView :)

呼叫 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 中可用,所以我們使用了 loaded 事件而不是那個。