ionic3中的角度动画在收到自定义的cordova插件,以便Android响应按钮按下后停止工作]]

问题描述 投票:0回答:1
我正在开发自定义的cordova插件(目前为Android),可与Ionic一起使用。该插件使用以下代码将侦听器添加到WebView:

this.callbackContext = callbackContext;//store this for later this.webView.getView().setOnKeyListener(this);//add listener PluginResult pluginResult = new PluginResult(PluginResult.Status.NO_RESULT); // send no result cause the result will be sent by the listener pluginResult.setKeepCallback(true); this.callbackContext.sendPluginResult(pluginResult);

然后我以这种方式覆盖侦听器:

@Override public boolean onKey(View view, int keyCode, KeyEvent keyEvent) { JSONObject result = new JSONObject(); if (keyEvent.getAction() == KeyEvent.ACTION_DOWN) { if (keyCode == KeyEvent.KEYCODE_VOLUME_UP || keyCode == KeyEvent.KEYCODE_VOLUME_DOWN { try { result.put("button", "button pressed"); } catch (JSONException err) { } } PluginResult pr = new PluginResult(PluginResult.Status.OK, result); pr.setKeepCallback(keepCallback); this.callbackContext.sendPluginResult(pr); return false; } return true; }
在离子性方面,我可以看到插件正确地发送了结果,但似乎增加了一些怪异的行为:当从离子性中收到事件时,我的代码需要启动一个动画(角度动画),该动画已启动但尚未完成。它似乎卡住了。如果在收到事件后以任何方式与ui进行交互(例如,如果我只点击屏幕,一切都将再次开始工作),则该应用将再次响应如果我以其他方式触发动画,动画将完美运行。

以这种方式创建动画:

@Component({ ... animations: [ trigger('buttonAnimation', [ state('normal', style({ 'transform': 'scale(1.0)' })), state('big', style({ 'transform': 'scale(1.2)', })), transition('* => *', animate('.1s ease')) ]), ] })
更新:

我以这种方式在模板文件中应用了动画

<button> <i (click)="onButtonPressed()" [@buttonAnimation]="buttonState" (@buttonAnimation.done)="onAnimationEnd()"></i> </button>

以及来自cordova插件的回调通过设置变量来触发动画

enter code here this.buttonState = 'big';

然后重新使用动画初始化

onAnimationEnd() { this.buttonState = 'normal' }

以这种方式使用cordova插件开始动画:

cordova.plugins.buttonListener.listenButtonClick(data => { this.buttonState = 'big'; }, err => { });

我正在开发自定义的cordova插件(目前为Android),可与Ionic一起使用。该插件使用以下代码将侦听器添加到WebView:this.callbackContext = callbackContext; //存储此...
cordova ionic3 cordova-plugins
1个回答
0
投票
很可能您需要强制detectChanges或在ngZone内部运行它。

constructor(private ref: ChangeDetectorRef){} ngOnInit() { cordova.plugins.buttonListener.listenButtonClick(data => { this.buttonState = 'big'; this.ref.detectChanges(); }, err => { }); }

© www.soinside.com 2019 - 2024. All rights reserved.