在 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
事件而不是那个。