使用Java-GI Gtk/Adw绑定调用Adw.Animation时出现断言错误求助
问题原因与解决办法
错误根源
你碰到的这个断言错误,是因为Java-GI绑定里的CallbackAnimationTarget没被Adwaita的C底层认成合法的AdwAnimationTarget类型。为啥动画还能正常跑?因为这个类内部的回调逻辑还是能被触发,只是C层的类型检查没通过,所以打了条CRITICAL级别的错误日志而已。
解决方法
换用PropertyAnimationTarget来创建动画目标就行——直接绑定Widget的opacity属性,这是Adwaita动画API的标准用法,既能通过C层的类型检查,功能也完全没问题:
private void fadeWidget(Widget widget, DoneCallback onDone) { // widget is a Gtk.Image // 绑定widget的"opacity"属性作为动画目标 AnimationTarget target = PropertyAnimationTarget.newForProperty(widget, "opacity"); Animation animation = new TimedAnimation(widget, 1.0, 0, 2000, target); animation.onDone(onDone); animation.play(); }
额外说明
要是非得用CallbackAnimationTarget,可以试试把Java-GI更到最新版,有些旧版本的绑定可能存在类型包装的bug。但还是更推荐用PropertyAnimationTarget,既符合Adwaita的设计思路,还能彻底消掉这条错误日志。
内容的提问来源于stack exchange,提问作者CraigFoote
相关产品推荐
相关产品推荐

