Android 中如何设置activity的启动动画,让它像dialog一样从底部往上出来

简介: 在 Android 中实现 Activity 的对话框式过渡动画:从底部滑入与从顶部滑出。需定义两个 XML 动画文件 `activity_slide_in.xml` 和 `activity_slide_out.xml`,分别控制 Activity 的进入与退出动画。使用 `overridePendingTransition` 方法在启动 (`startActivity`) 或结束 (`finish`) Activity 时应用这些动画。为了使前 Activity 保持静止,可定义 `no_animation.xml` 并在启动新 Activity 时仅设置新 Activity 的进入动画。

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点

在 Android 中,你可以通过定义自定义的动画资源并在启动和结束 Activity 时应用这些动画,实现类似对话框从底部向上进入,从上向下退出的效果。具体步骤如下:

1. 定义动画资源

首先,创建两个 XML 动画文件,一个用于 Activity 进入时的动画,一个用于退出时的动画。

res/anim/activity_slide_in.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="300"
        android:fromYDelta="100%"
        android:toYDelta="0%" />
    <alpha
        android:duration="300"
        android:fromAlpha="0.0"
        android:toAlpha="1.0"/>
</set>

res/anim/activity_slide_out.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="300"
        android:fromYDelta="0%"
        android:toYDelta="100%" />
    <alpha
        android:duration="300"
        android:fromAlpha="1.0"
        android:toAlpha="0.0"/>
</set>

2. 应用动画资源

在你的 Activity 的 overridePendingTransition 方法中指定这两个动画文件。

启动新的 Activity 时

在启动一个新的 Activity 时你可以这样使用:

val intent = Intent(this, NewActivity::class.java)
startActivity(intent)
overridePendingTransition(R.anim.activity_slide_in, R.anim.activity_slide_out)

结束当前 Activity 时

在结束当前 Activity 时你需要在 finish 之前调用 overridePendingTransition

finish()
overridePendingTransition(R.anim.activity_slide_in, R.anim.activity_slide_out)

针对 Activity 退出动画

为了确保 Activity 在退出时使用自定义动画,你还需要覆盖 onBackPressed 方法:

override fun onBackPressed() {
    super.onBackPressed()
    overridePendingTransition(R.anim.activity_slide_in, R.anim.activity_slide_out)
}

示例代码

假设你有两个 Activity,MainActivityNewActivity,以下是应用动画的示例代码:

// In MainActivity.kt
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val button = findViewById<Button>(R.id.openActivityButton)
        button.setOnClickListener {
            val intent = Intent(this, NewActivity::class.java)
            startActivity(intent)
            overridePendingTransition(R.anim.activity_slide_in, R.anim.activity_slide_out)
        }
    }
}

// In NewActivity.kt
class NewActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_new)
    }

    override fun onBackPressed() {
        super.onBackPressed()
        overridePendingTransition(R.anim.activity_slide_in, R.anim.activity_slide_out)
    }
}

通过这个方法,你可以轻松地让你的 Activity 像 Dialog 一样,从底部向上进入,从上到下退出。上述动画时长可以根据实际需求进行调整。

如何只让新启动的activity有动画效果,之前的activity不动

先定义一个静止的动画

res/anim/no_animation.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha
        android:duration="0"
        android:fromAlpha="1.0"
        android:toAlpha="1.0" />
</set>

no_animation.xml 是一个没有任何动画效果的动画文件,用于主 Activity 保持静止。

启动新的 Activity 时

val intent = Intent(this, NewActivity::class.java)
startActivity(intent)
overridePendingTransition(R.anim.activity_slide_in, R.anim.no_animation)

在新的 Activity 返回时,也不需要动画

在新的 Activity 中,确保返回时无动画:

override fun finish() {
    super.finish()
    overridePendingTransition(0, 0)
}

欢迎关注我的公众号AntDream查看更多精彩文章!

目录
相关文章
|
11月前
|
Android开发 开发者
Android设置View是否可用
在Android开发中,有时需要将布局设置为不可点击状态(失去焦点)。常见的解决方法是使用`setOnClickListener(null)`,但本文介绍一种更通用的方式:通过封装`setViewEnabled`方法实现。该方法可递归设置View及其子View的启用状态,支持传入目标View和布尔值(`true`为可用,`false`为禁用)。例如,调用`setViewEnabled(edittext, false)`即可禁用EditText。文章附有源码及示例动图,帮助开发者快速理解与应用。
245 1
|
11月前
|
Android开发 开发者
Android中Dialog位置+样式的设置
本文介绍了在Android开发中如何设置Dialog的位置和样式。通过自定义`MyDialog`类,可以灵活调整Dialog的显示位置,例如将其固定在屏幕底部,并设置宽度匹配父布局。同时,文章还展示了如何模仿Android原生Dialog样式,通过定义`MyDialogStyle`去除标题栏、设置背景透明度、添加阴影效果以及配置点击外部关闭等功能,从而实现更加美观和符合需求的Dialog效果。代码示例详细,便于开发者快速上手实现。
603 2
|
Android开发
Android面试之Activity启动流程简述
Android面试之Activity启动流程简述
315 6
|
消息中间件 Android开发 索引
Android面试高频知识点(4) 详解Activity的启动流程
Android面试高频知识点(4) 详解Activity的启动流程
397 3
|
Android开发
Android面试之Activity启动流程简述
Android面试之Activity启动流程简述
211 0
|
Web App开发 存储 Android开发
android 手机恢复出厂设置,恢复青春活力
本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/50516200 未经博主允许不得转载。 博主地址是:http://blog.csdn.net/freewebsys 1,关于android android手机用起来没啥太多问题,软件安装的也不多。 但是最近手机开始频繁死机,连接wifi也是死机。
1743 0
|
6月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1078 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
6月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
838 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
6月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1006 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
7月前
|
开发工具 Android开发
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
771 11
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡