无法在独立视图上启动此动画师

时间:2018-04-25 16:54:18

标签: android android-animation circularreveal

有人能告诉我这是错的吗?

View view = findViewById(R.id.thumbnail_image_header); // thumbnail_image_header是一个imageView

    int cx = (view.getLeft() + view.getRight()) / 2;
    int cy = (view.getTop() + view.getBottom()) / 2;

    // get the final radius for the clipping circle
    int dx = Math.max(cx, view.getWidth() - cx);
    int dy = Math.max(cy, view.getHeight() - cy);
    float finalRadius = (float) Math.hypot(dx, dy);

    // Android native animator
    Animator animator =
            ViewAnimationUtils.createCircularReveal(view, cx, cy, 0, finalRadius);
    animator.setInterpolator(new AccelerateDecelerateInterpolator());
    animator.setDuration(1500);
    animator.start();

2 个答案:

答案 0 :(得分:0)

在MainLayout的addOnLayoutChangeListener下添加动画。

mainView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
        @Override
        public void onLayoutChange(View view, int i, int i1, int i2, int i3, int i4, int i5, int i6, int i7) {
            view.removeOnLayoutChangeListener(this);

            //Add circular revel animation on activity start
            mainView.post(new Runnable() {
                @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
                @Override
                public void run() {
                    //Your Animation Code
                }
            });

        }
    });

答案 1 :(得分:0)

您可以检查视图当前是否已附加。如果没有,请添加OnAttachStateChangeListener并在附加视图后立即开始动画。

if (view.isAttachedToWindow()) {

    // startAnimation..

} else {
    view.addOnAttachStateChangeListener(new OnAttachStateChangeListener() {
        @Override
        public void onViewAttachedToWindow(View v) {                
            v.removeOnAttachStateChangeListener(this);

            // startAnimation..

        }
        
        @Override
        public void onViewDetachedFromWindow(View v) {
        }
    });
}