Android關于Activity切換效果的實現加強

jopen 12年前發布 | 51K 次閱讀 Android Android開發 移動開發

早前做完一個應用后期需要加入點效果化。

相對于iPhone上應用的效果,最為經典的界面切換視覺效果就是,放大進入和縮小退出。

還好Android也早以有了這樣對應的動畫文件。

并且如大家所知的,提供了

overridePendingTransition()這個

最簡單實現的方法api.

------------------------

但是如網上所說的:

這里需要特別說明的是,關于overridePendingTransition這個函數,有兩點需要主意:
1.它必需緊挨著startActivity()或者finish()函數之后調用
2.它只在android2.0以及以上版本上適用

----------------------------------------

第二點不提了。

提下第一點,該方法必須在以上兩個函數之后調用。

簡單說就是 A ——> B切換

我們可以在A是startActivity方法后執行。那我A進來的時候呢?

比如A為入口Activity。

當然目前的應用可以很簡單的解決這個視覺上的問題,因為一般應用進入都做了log或是過渡的Activity。

問題1也基本算解決了。

但是感覺每次都在start或是finish方法后寫下這代碼挺麻煩的

于是我試著把overridePendingTransition寫在基類的oncreate中。

/**
 * @author Nono
 * 
 */
public abstract class BaseActivity extends Activity {

    public TextView titleView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
        super.onCreate(savedInstanceState);
        overridePendingTransition(R.anim.zoomin, R.anim.zoomout);

    }

發現也行的。。猜測這個方法背后發生了什么。

然后蛋疼的去看了下Activity中overridePendingTransition()方法,

然后引出:ActivityManagerNative,ActivityManagerProxy等等各個無語凝噎的名詞。

引出ActivityManager框架。FrameWork層次東西了,有興趣的可以google研究下。

提下切換效果的另一種玩法。

style文件。

上面這個方式看似能很好的解決了切換這個問題。

但是仔細一看卻發現,只存在兩種狀態下,startActivity,開啟時和 finish,結束時。

一開始我考慮到activity單例以及不銷毀問題。也就是不finish的時候。

悲劇了效果代碼沒地方寫了。

簡單舉例:比如tabLayout布局式的。一個tabHost容器中有4個Activity,一般來說tag切換時,我們是不調用finish,而只是執行onStop,甚至上次我打

log時發現居然只是onPasue()(這個問題比較詭異了,暫且不理它)。

最后發現activity中Style下的一個android:windowAnimationStyle屬性。

<style name="activty_fade_in_fade_out">
        <item name="@android:activityOpenEnterAnimation">@anim/fade_in</item>

        <item name="@android:activityOpenExitAnimation">@anim/fade_out</item>

        <item name="@android:activityCloseEnterAnimation">@anim/fade_in</item>


        <item name="@android:activityCloseExitAnimation">@anim/fade_out</item>
    </style>

<style name="register_activity" parent="XTheme">
        <item name="@android:windowAnimationStyle">@style/activty_bottom_in_top_out</item>
    </style>

<activity android:name=".activity.LoginActivity" android:screenOrientation="portrait" 
        android:theme="@style/In_Out_theme"/>

以上只是style中item可以有更多選擇,就剛好解決了上面提到的問題。

參數更多查看文檔

http://developer.android.com/reference/android/R.styleable.html#WindowAnimation


順帶提下界面中View的效果,同樣的可以自定義動畫。

以及在布局文件中的

android:layoutAnimation中定義動畫效果。


 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!