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
相关产品推荐
相关产品推荐

