Android圆形揭示动画太快了

时间:2015-07-02 18:59:10

标签: android animation view circularreveal

我在我的项目中使用循环显示动画,但它现在正常工作。问题是揭示发生了快速的方式,你几乎无法看到揭示,因为它会立即扩展。我尝试设置anim.setDuration(),但这并没有改变任何东西。我使用了谷歌示例中的代码。

这是我的代码:     查看myView = getActivity()。findViewById(R.id.view_to_expand);

int cx = myView.getRight();
int cy = myView.getBottom();

int finalRadius = Math.max(myView.getWidth(), myView.getHeight());

Animator anim = ViewAnimationUtils.createCircularReveal(myView, cx, cy, 0, finalRadius);

myView.setVisibility(View.VISIBLE);
anim.start();

view_to_expand是一个简单的相对布局,不要认为问题存在。另外,我如何将圆形显示应用于动画过渡?

1 个答案:

答案 0 :(得分:6)

瞬时扩展是因为除了动画之外主要线程还有其他重要工作(数据更新,其他视图/片段隐藏,渲染刷新等)。

最好的办法是将其包装成runnable并将其添加到堆栈中。它将在有可用的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);
    }
}