代码之家  ›  专栏  ›  技术社区  ›  Alexander Farber

FAB没有动画-测试代码和截图已附加

  •  1
  • Alexander Farber  · 技术社区  · 9 年前

    我已经准备好了 a simple test project at GitHub 对于我的问题:

    app screenshot

    我试图显示/隐藏 FloatingActionButton (又名FAB)每5秒通过以下代码 MainActivity.java :

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        mFab = (FloatingActionButton) findViewById(R.id.fab);
    
        mInAnimation = AnimationUtils.makeInAnimation(this, false);
        mInAnimation.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationEnd(Animation animation) {
            }
    
            @Override
            public void onAnimationRepeat(Animation animation) {
            }
    
            @Override
            public void onAnimationStart(Animation animation) {
                mFab.setVisibility(View.VISIBLE);
            }
        });
    
        mOutAnimation = AnimationUtils.makeOutAnimation(this, true);
        mOutAnimation.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationEnd(Animation animation) {
                mFab.setVisibility(View.INVISIBLE);
            }
    
            @Override
            public void onAnimationRepeat(Animation animation) {
            }
    
            @Override
            public void onAnimationStart(Animation animation) {
            }
        });
    
        run();
    }
    

    这个 Runnable 输出(“切换动画”)在ADB日志中每5秒出现一次,但FAB始终可见:

    @Override
    public void run() {
        Log.d("MyCoordinator", "Toggle animation");
        mFab.setAnimation(mFab.isShown() ? mOutAnimation : mInAnimation);
        mHandler.postDelayed(this, 5000);
    }
    

    有人知道这里缺什么吗?

    我也很好奇,是否可以在 activity_main.xml 而不是Java代码。

    1 回复  |  直到 9 年前
        1
  •  1
  •   Blackbelt    9 年前

    我宁愿使用 mFab.startAnimation(mFab.isShown() ? mOutAnimation : mInAnimation) mFab.setAnimation(mFab.isShown() ? mOutAnimation : mInAnimation); 具有 setAnimation 您必须定义动画的开始时间(这可能是您缺少的时间)