TranslateAnimation - 动画仅在第二次之后起作用

pio*_*ojo 2 animation android

我使用了一些我在滑动面板上找到的代码,基本上它可以工作但是有一个小问题.

第一次打开面板时动画不起作用.

这是动画的代码:

    TranslateAnimation anim = null;


    m_isOpen = !m_isOpen;

    if (m_isOpen) {
        setVisibility(View.VISIBLE);
        anim = new TranslateAnimation(0.0f, 0.0f, getHeight(), 0.0f);
    } else {
        anim = new TranslateAnimation(0.0f, 0.0f, 0.0f, getHeight());
        anim.setAnimationListener(new Animation.AnimationListener() {
              public void onAnimationEnd(Animation animation) {
                   setVisibility(View.GONE);
              }

              public void onAnimationRepeat(Animation animation) {
                   // not needed
              }

              public void onAnimationStart(Animation animation) {
                   // not needed
              }
        });

    }

    anim.setDuration(300);
    anim.setInterpolator(new AccelerateInterpolator(1.0f));
    startAnimation(anim);
Run Code Online (Sandbox Code Playgroud)

为什么在第一次打开面板时没有动画,但其他所有动画都有?

dmo*_*mon 6

你什么时候打电话给这个?它可能只是"在第一次之后"执行它,因为当您第一次调用它时,面板尚未渲染,并且getHeight()正在返回0.尝试等待直到getHeight()有值并开始动画.您也可以尝试将值硬编码为某种东西,以测试我的理论是否正确.