Android Activity 平滑水平切換動畫

在Android當中 設置activity的動畫 需要複寫 android:windowAnimationStyle這個屬性

我們自定義一個動畫樣式來繼承 @android:style/Animation(Base style for animations.  This style specifies no animations)這個樣式是Android操作系統提供的 沒用動畫的樣式 我們定義其中的4個屬性還設置我們想要的效果

android:activityOpenEnterAnimation 一個activity創建進入的效果

android:activityOpenExitAnimation 一個activity還沒有finish()下退出效果, 比如有倆個activity A,B 首先啓動A 然後再啓動B 那麼A還沒有finish() 這A的退出效果

android:activityCloseEnterAnimation 表示上一個activity返回進入效果 比如有倆個activity A,B B退出後A進入的效果

activityCloseExitAnimation 表示的是activity finish()之後的效果 比如有倆個activity A,B B退出後會被finish() 那麼B的退出效果在這定義

下面給出程序中需要用到的主題:

<!--動畫左右切換的theme-->
    <style name="LeftRight" parent="@android:style/Theme.Translucent.NoTitleBar">
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowAnimationStyle">@style/AnimationActivity</item>
    </style>
       <!--
       1:第一個表示新的activity創建進入效果
       2:第2個表示activity還沒有finish()下退出效果
       3:第3個表示上一個activity返回進入效果
       4:第4個表示的是activity finish()之後退出效果
       -->
    <style name="AnimationActivity" mce_bogus="1" parent="@android:style/Animation.Activity">
        <item name="android:activityOpenEnterAnimation">@anim/in_from_right</item>
        <item name="android:activityOpenExitAnimation">@anim/out_to_left</item>
        <item name="android:activityCloseEnterAnimation">@anim/in_from_left</item>
        <item name="android:activityCloseExitAnimation">@anim/out_to_right</item>
    </style>

下面給出4個動畫文件:

1:in_from_right.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="100%p"
               android:toXDelta="0%p"
               android:duration="500"/>
</set>

2:in_from_left.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="-100%p"
               android:toXDelta="0%p"
               android:duration="500"/>
</set>

3:out_from_right

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="0%p"
               android:toXDelta="100%p"
               android:duration="500"/>
</set>

4:out_from_left

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="0%p"
               android:toXDelta="-100%p"
               android:duration="500"/>
</set>

最後給出相應AndroidManifast文件中是如何配置的:

<activity
                android:name="xxxx"
                android:configChanges="keyboardHidden|orientation|screenSize"
                android:screenOrientation="portrait"
                android:theme="@style/LeftRight"
                android:windowSoftInputMode="adjustPan|stateHidden">
        </activity>

自己使用的時候發現的問題:剛開始的時候動畫寫好以後,運行程序發現動畫時有時無,不知道什麼原因,但是在其他Activity上面驗證是好的,我了個擦,後來發現我在那個有問題的Activity中複寫了父類的onWindowFouceChanged方法,在裏面計算了某個View距離頂部的距離,最後將這部分代碼拿出來,放到其他地方進行計算,動畫就好了,坑爹啊!

在這個把這個問題記錄一下~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章