无法在分离的视图上启动动画师

我已经创建了在Kotlin中扩展PopupView的类,并尝试使用CircleReveal库进行动画显示。 这是我班的功能

fun show(root: View) { showAtLocation(root, Gravity.CENTER, 0, 0) val cx = (mainView.left + mainView.right) / 2 val cy = (mainView.top + mainView.bottom) / 2 val dx = Math.max(cx, mainView.width - cx) val dy = Math.max(cy, mainView.height - cy) val finalRadius = Math.hypot(dx.toDouble(), dy.toDouble()).toFloat() with (ViewAnimationUtils.createCircularReveal(mainView, cx, cy, 0f, finalRadius)) { interpolator = AccelerateDecelerateInterpolator() duration = 1500 start() } } 

该代码给我下面的错误

 java.lang.IllegalStateException: Cannot start this animator on a detached view! at android.view.RenderNode.addAnimator(RenderNode.java:817) at android.view.RenderNodeAnimator.setTarget(RenderNodeAnimator.java:300) at android.view.RenderNodeAnimator.setTarget(RenderNodeAnimator.java:282) at android.animation.RevealAnimator.<init>(RevealAnimator.java:37) at android.view.ViewAnimationUtils.createCircularReveal(ViewAnimationUtils.java:53) at io.codetail.animation.ViewAnimationUtils.createCircularReveal(ViewAnimationUtils.java:74) at io.codetail.animation.ViewAnimationUtils.createCircularReveal(ViewAnimationUtils.java:39) 

类初始化

 class MemberMenu(ctx: Context, val member: Member): PopupWindow(ctx), View.OnClickListener { val mainView: View init { contentView = LayoutInflater.from(ctx).inflate(R.layout.member_menu_layout, null) mainView = contentView.findViewById(R.id.member_menu_view) val size = Helpers.dipToPixels(ctx, 240f) width = size; height = size setBackgroundDrawable(ColorDrawable()) isOutsideTouchable = true isTouchable = true } ....... 

不知道,如果这是正确的解决方案,但我只是将该代码移动到OnAttachStateChangeListener

  fun show(root: View) { showAtLocation(root, Gravity.CENTER, 0, 0) backgroundView.addOnAttachStateChangeListener(this) } override fun onViewAttachedToWindow(v: View?) { if (v==null) return with(ViewAnimationUtils.createCircularReveal(v, 500, 500, 0f, 500f)) { interpolator = AccelerateDecelerateInterpolator() duration = 2500 start() } } override fun onViewDetachedFromWindow(v: View?) {}