You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中Floating Action Button二次点击无法设为INVISIBLE/GONE

Floating Action Button 无法设置为INVISIBLE/GONE状态

问题现象

  • 首次点击add_btn时功能运行正常:动画可正常播放,其余悬浮按钮可正常切换为可见状态。
    首次点击效果截图
  • 第二次点击add_btn时,关闭动画可正常播放,但其余按钮无法切换为INVISIBLE/GONE隐藏状态。
    二次点击效果截图

现有实现代码

按钮控制Java代码

addFloatingBtn.setOnClickListener(view -> {
            if (!isFloatingActionBtnVisible){
                // 显示按钮
                addVideoFloatingBtn.setVisibility(View.VISIBLE);
                addNotesFloatingBtn.setVisibility(View.VISIBLE);
                // 播放展开动画
                addVideoFloatingBtn.startAnimation(fromBottom);
                addNotesFloatingBtn.startAnimation(fromBottom);
                addFloatingBtn.startAnimation(rotateOpen);
                isFloatingActionBtnVisible = true;
                Toast.makeText(getContext(), "Animation Added", Toast.LENGTH_SHORT).show();
            }else {
                // 播放关闭动画
                addVideoFloatingBtn.startAnimation(toBottom);
                addNotesFloatingBtn.startAnimation(toBottom);
                addFloatingBtn.startAnimation(rotateClose);
                // 隐藏按钮
                addVideoFloatingBtn.setVisibility(View.GONE);
                addNotesFloatingBtn.setVisibility(View.GONE);
                isFloatingActionBtnVisible = false;
            }
        });

XML布局代码

<com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/add_floating_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="16dp"
        android:layout_marginBottom="16dp"
        android:clickable="true"
        android:src="@drawable/ic_add"
        android:tint="@color/white"
        android:background="@color/purple_500"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        android:focusable="true" />

    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/add_video_floating_btn"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_marginBottom="16dp"
        android:clickable="true"
        android:src="@drawable/ic_add_video"
        android:visibility="invisible"
        app:layout_constraintBottom_toTopOf="@+id/add_floating_btn"
        app:layout_constraintEnd_toEndOf="@+id/add_floating_btn"
        app:layout_constraintStart_toStartOf="@+id/add_floating_btn" />

    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/add_notes_floating_btn"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_marginBottom="16dp"
        android:clickable="true"
        android:src="@drawable/ic_notes"
        android:visibility="invisible"
        app:layout_constraintBottom_toTopOf="@+id/add_video_floating_btn"
        app:layout_constraintEnd_toEndOf="@+id/add_video_floating_btn"
        app:layout_constraintStart_toStartOf="@+id/add_video_floating_btn" />

问题原因

启动关闭动画的同时立刻调用setVisibility()修改可见性,此时退出动画还未执行完成,动画持有的视图绘制状态会覆盖设置的可见性属性,最终导致按钮无法正常隐藏。

修复方案

给关闭动画设置状态监听器,等动画完全播放结束后再修改按钮可见性,修改后的else分支代码如下:

else {
    // 播放关闭动画
    addVideoFloatingBtn.startAnimation(toBottom);
    addNotesFloatingBtn.startAnimation(toBottom);
    addFloatingBtn.startAnimation(rotateClose);
    // 监听动画播放状态,动画结束后再执行隐藏逻辑
    toBottom.setAnimationListener(new Animation.AnimationListener() {
        @Override
        public void onAnimationStart(Animation animation) {}

        @Override
        public void onAnimationEnd(Animation animation) {
            addVideoFloatingBtn.setVisibility(View.GONE);
            addNotesFloatingBtn.setVisibility(View.GONE);
            isFloatingActionBtnVisible = false;
        }

        @Override
        public void onAnimationRepeat(Animation animation) {}
    });
}

如果需要实现INVISIBLE隐藏效果,将上述代码中的View.GONE替换为View.INVISIBLE即可。


内容的提问来源于stack exchange,提问作者Hammad Zafar Bawara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 21:57:23