Android自定义Activity Animation(一)

在Android里Activity的切换都有默认的动画,不同系统版本不同的ROM的动画可能不同,然而我们可以通过自定义Activity Animation来实现一致的或更炫酷的效果。本篇文章将对(Android 5.0 之后推出了Activity enter and exit transition animation 是后话,这里感兴趣可以去了解一下)

如果你只想要实现简单的替换默认的Activity Animation,你只需要在startActivity(Intent intent)后调用overridePendingTransition (int enterAnim, int exitAnim)调用对应的动画文件就可以实现自定义Activity Animation了。不过下面我将介绍一个稍微复杂一点的Activity Animation是实现。

下面已Ireader的打开书籍的demo作为例子,介绍一下。 自定义的Activity Animation。效果图如下:(gif图,点开大图观看)

ireader_demo

分析:点击书的封面后将打开书籍(此时是打开了另外一个Activity,叫ReadingPageActivity),此时执行我们自定义的Activity动画。这个动画像是直接在该Activity下直接打开的,而不是打开了一个新的窗口,且书籍的打开动画随着书的位置不同有不同放大动画。

实现这个自定义的Activity animation的原理是这样的,当我们需要打开另外一个Activity的时候,我们把原来的window animation给disable掉,然后这样相当于马上开启了我们需要打开的Activity,然后再开始运行我们的自定义动画。

要实现打开的Activity像是直接在当前Activity直接打开的效果,我们需要把Activity的windowBackground设置为透明(不然Activity会有一个默认的Background,造成Activity在另一个窗口打开的效果)。先自定义透明背景的style:

 <style name="Transparent" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowBackground">@android:color/transparent</item>
    </style>

然后在AndroidManifest里把对应的Activity的theme设置为这个透明的style:

  <activity
            android:screenOrientation="portrait"
            android:name=".ReadingPageActivity"
            android:label="@string/title_activity_reading_page"
            android:theme="@style/Transparent" >

然后我们要在startActivity(Intent intent)的后面马上调用方法overridePendingTransition(0,0)来关闭Window的动画。

现在已经完成了基本的准备工作,下一篇将讲解如何实现,图片的放大和翻书动画。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>