Android Activity切换动画多种实现方式与封装

本文详细介绍了Android中实现Activity切换动画的三种方式:`activity.overridePendingTransition()`、`ActivityOptionsCompat`和在AppTheme中设置动画样式。同时,文章探讨了各种方式的优缺点,并提供了一个简单的动画封装方法,以提高开发效率。
摘要由CSDN通过智能技术生成

关于Activity动画那些事

关于activity的动画,相信大家再熟悉不过了,我们开发中经常用到,网上资料也很多,但是也有一些小细节需要我们注意,今天这篇文章我总结了几种常用的动画实现方式,通过这篇文章,你可以了解到:

  • 几种常见的activity动画实现方式
  • activity动画中需要注意的细节
  • 这几种方式的优缺点比较,我们如何取舍
  • 对这几种方式进行简易封装,提高我们的开发效率

几种常见的实现方式:

1. activity.overridePendingTransition()

这种方式相信大家一定非常熟悉了,简单回忆一下,我们只需要在start另一个activity启动的时候调用就行,这个方法接收两个参数,一个是我们新启动的activity进入时的动画,另一个是当前activity退出时的动画(很多时候我们是不需要这个动画的,只需要另一个activity进入的效果),首先我们在我们res文件目录下新建一个anim文件夹,随便建一个动画效果,我这里以从右边划入为例,首先我建一个slide_in_right.xml的文件:

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="300"
        android:fromXDelta="100.0%p"
        android:toXDelta="0.0" />
</set>

我们最熟悉的平移动画,用法:

private void start() {
        startActivity(new Intent(MainActivity.this, TestActivity.class));
        overridePendingTransition(R.anim.slide_in_right, 0);
    }

效果如图:
这里写图片描述
这样写似乎是我们要的效果,然而,在有些手机上却出现了很奇怪的黑色平移块,此时我们需要保持前一个页面不同,所以我们假写一个动画 animo_no:

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

这个动画是没有任何效果的,我们拿来抵消动画效果,现在跑起来就像是另一个页面执行动画,前面一个页面不动的效果了:

private void start() {
        startActivity(new Intent(MainActivity.this, TestActivityWithTheme.class));
        overridePendingTransition(R.anim.slide_in_right, R.anim.animo_no); 
           }

这里写图片描述

结束动画:
进入之后,为了保证动画的一致连贯性,所以我们需要在已经启动的activity中也覆盖同样的方法来执行结束动画,我们再建一个slide_out_right.xml:

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="300"
        android:fromXDelta="0"
        android:toXDelta="100.0%p" />
</set>

使用:
我们重写finish方法,在finish的时候加上我们的动画效果:

 @Override
    public void finish() {
        super.finish();
        overridePendingTransition(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值