瞬时扩展是因为除了您的动画(数据更新、其他视图/片段隐藏、渲染刷新等)之外,主线程上还有一些其他繁重的工作。
最好的办法是将它包装成一个可运行文件并将其添加到堆栈中。当有可用的 CPU 周期时将调用它并显示您的动画。
下面是创建和使用 runnable的正确方法。尽量不要发布匿名的,因为有可能用户返回并且您的 runnable 挂起并暴露内存泄漏和/或抛出运行时异常。
我在这里假设您的视图所在的类是一项活动,而您的类是您的活动myView
中的实例引用
public final ApplicationActivity extends Activity {
private View myView;
private final Runnable revealAnimationRunnable = new Runnable() {
@Override
public void run() {
int cx = myView.getRight();
int cy = myView.getBottom();
int finalRadius = Math.max(myView.getWidth(), myView.getHeight());
Animator animator = ViewAnimationUtils.createCircularReveal(myView, cx, cy, 0, finalRadius);
animator.start();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
...
myView = findViewById(R.id.view_to_expand);
myView.setVisibility(View.VISIBLE);
myView.post(revealAnimationRunnable);
// alternatively, in case load is way too big, you can post with delay
// i.e. comment above line and uncomment the one below
// myView.postDelayed(revealAnimationRunnable, 200);
}
@Override
protected void onDestroy() {
...
myView.removeCallbacks(revealAnimationRunnable);
}
}