窗体切换动画 overridePendingTransition

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了窗体切换动画 overridePendingTransition相关的知识,希望对你有一定的参考价值。


介绍

android开发过程中,经常会碰到Activity之间的切换效果的问题,下面介绍一下如何实现左右滑动的切换效果,首先了解一下Activity切换的实现,从Android2.0开始在Activity增加了一个方法:

public void overridePendingTransition (int enterAnim, int exitAnim)

其中:

enterAnim 定义Activity进入屏幕时的动画

exitAnim 定义Activity退出屏幕时的动画

overridePendingTransition 方法必须在startActivity()或者 finish()方法的后面。

Android已经内置了几种动画效果,可以见 android.R.anim 类。

若我们向自己定义屏幕切换的效果,需先了解Activity的位置定义,如下图:

技术分享

从上图可以看出:

  • 当Activity在X轴值为-100%p时,刚好在屏幕的左边(位置1)
  • 当X轴值为0%p时,刚好再屏幕内(位置2)
  • 当X=100%p时刚好在屏幕右边(位置3)

清楚了位置后,我们就可以实现左右滑动的切换效果,首先让要退出的Activity从位置2移动到位置1,同时让进入的Activity从位置3移动位置2,当然也可以反过来,这样就能实现从左右切换效果。


使用overridePendingTransition时要主意,它必需紧挨着startActivity()或者finish()函数之后调用。
不过有时候overridePendingTransition 这个函数会不起作用,总结下,大概是以下几个方面的原因:
  • 1、android系统版本2.0以下,这个没办法解决。
  • 2、在ActivityGroup等的嵌入式Activity中,这个比较容易解决,用 this.getParent().overridePendingTransition 就可以解决。
  • 3、在一个Activity的内部类中,或者匿名类中,这时候只好用handler来解决了。
  • 4、手机的显示动画效果被人为或者其他方式给关闭了 现在打开即可 设置->显示->显示动画效果


系统定义好的动画效果

【淡入淡出效果】 overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);

【由左向右滑入的效果】  overridePendingTransition(android.R.anim.slide_in_left,android.R.anim.slide_out_right);

fade_in

<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_longAnimTime"
    android:fromAlpha="0.0"
    android:interpolator="@interpolator/decelerate_quad"
    android:toAlpha="1.0" />

fade_out

<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_mediumAnimTime"
    android:fromAlpha="1.0"
    android:interpolator="@interpolator/accelerate_quad"
    android:toAlpha="0.0" />

slide_in_left

<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <translate
        android:duration="@android:integer/config_mediumAnimTime"
        android:fromXDelta="-50%p"
        android:toXDelta="0" />
    <alpha
        android:duration="@android:integer/config_mediumAnimTime"
        android:fromAlpha="0.0"
        android:toAlpha="1.0" />
</set>  

slide_out_right

<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <translate
        android:duration="@android:integer/config_mediumAnimTime"
        android:fromXDelta="0"
        android:toXDelta="50%p" />
    <alpha
        android:duration="@android:integer/config_mediumAnimTime"
        android:fromAlpha="1.0"
        android:toAlpha="0.0" />
</set>  

 <integer name="config_mediumAnimTime">400</integer>


自定义动画

    startActivity(new Intent(this, SecondActivity.class));

    overridePendingTransition(R.anim.zoomin,R.anim.zoomout);


anim/zoomin.xml

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/decelerate_interpolator" >
    <scale
        android:duration="@android:integer/config_mediumAnimTime"
        android:fromXScale="0.1"
        android:fromYScale="0.1"
        android:pivotX="50%p"
        android:pivotY="50%p"
        android:toXScale="1.0"
        android:toYScale="1.0" />
    <alpha
        android:duration="@android:integer/config_mediumAnimTime"
        android:fromAlpha="0"
        android:toAlpha="1.0" />
</set>

anim/zoomout.xml

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/decelerate_interpolator"
    android:zAdjustment="top" >
    <scale
        android:duration="@android:integer/config_mediumAnimTime"
        android:fromXScale="1.0"
        android:fromYScale="1.0"
        android:pivotX="50%p"
        android:pivotY="50%p"
        android:toXScale="0.1"
        android:toYScale="0.1" />
    <alpha
        android:duration="@android:integer/config_mediumAnimTime"
        android:fromAlpha="1.0"
        android:toAlpha="0" />
</set>






























以上是关于窗体切换动画 overridePendingTransition的主要内容,如果未能解决你的问题,请参考以下文章

如何在vb窗体中显示gif动画

C#窗口切换问题:如何切换回主窗体

打开和关闭窗体动画

c#制作飘动动画窗体

窗体 dialog 弹出时动画效果

duilib制作窗体动画效果