0

谁能告诉我这有什么问题?

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();
4

2 回答 2

1

addOnLayoutChangeListener在MainLayout下添加动画。

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
                }
            });

        }
    });
于 2018-04-25T17:21:22.057 回答
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) {
        }
    });
}
于 2020-07-21T07:53:39.600 回答