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

Android点击按钮实现布局从下到上、从上到下动画的实现咨询

Android BottomSheet 上下弹出/收起动画实现方案

你当前误用了Activity专属的切换动画方法overridePendingTransition,该方法对Dialog组件无效,按以下步骤修改即可实现需求:

步骤1:创建动画资源文件

在res目录下新建anim子目录,添加两个动画配置文件:

  • slide_in_up.xml(从下向上滑入的入场动画)
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="300"
    android:fromYDelta="100%p"
    android:toYDelta="0"
    android:fillAfter="true"/>
  • slide_out_down.xml(从上向下滑出的退场动画)
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="300"
    android:fromYDelta="0"
    android:toYDelta="100%p"
    android:fillAfter="true"/>

步骤2:自定义带动画的Dialog主题

在res/values/styles.xml中添加如下自定义样式:

<style name="BottomSheetAnimTheme" parent="Theme.AppCompat.Light.Dialog">
    <!-- 关联自定义动画 -->
    <item name="android:windowAnimationStyle">@style/BottomSheetAnim</item>
    <!-- 去掉默认背景和标题,适配BottomSheet特性 -->
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">false</item>
</style>

<style name="BottomSheetAnim">
    <item name="android:windowEnterAnimation">@anim/slide_in_up</item>
    <item name="android:windowExitAnimation">@anim/slide_out_down</item>
</style>

步骤3:修改原有Activity代码

删除无效的overridePendingTransition调用,实例化BottomSheetDialog时传入自定义主题即可,修改后的代码如下:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // 传入自定义的带动画主题
            final BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(
                    MainActivity.this, R.style.BottomSheetAnimTheme);
            View bottomSheetView = LayoutInflater.from(getApplicationContext())
                    .inflate(R.layout.bottom_sheet,
                            (LinearLayout)findViewById(R.id.bottomSheetContainer));
            bottomSheetDialog.setContentView(bottomSheetView);
            bottomSheetDialog.show();
        }
    });
}

修改后点击按钮即可看到从下向上弹出的效果,点击外部区域/返回键时会自动执行从上向下收起的动画。

内容的提问来源于stack exchange,提问作者user16576274

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 12:54:00