android動畫切換
『壹』 android 兩個activity之間怎麼進行帶動畫的翻轉切換
//實現淡入淺出的效果
startActivity(new Intent(MainActivity.this,SecondActivity.class));
overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);
// 由左向右滑入的效果
startActivity(new Intent(MainActivity.this,SecondActivity.class));
overridePendingTransition(android.R.anim.slide_in_left,android.R.anim.slide_out_right);
你可以去網路下這個方法overridePendingTransition。
『貳』 android中如何進行多個view進行動畫切換
這個首選需要你的手機是四核及以上,這是硬體要求,再者就是你每次打開視頻或者游戲界面看看是否有沒有在手機右側有個小窗口等類似字眼,點擊下,即可。
『叄』 android TextSwitcher一個帶有文字切換動畫效果
布局
動畫
message_in_anim
message_out_anim
點擊事件
『肆』 Android 動畫詳解
android中酷炫的效果,都離不開動畫的支持。這里我們詳細介紹一下android中動畫的分類。android的中動畫分為幀動畫、補間動畫、屬性動畫。原理各不相同,實現的效果也大不相同。下面一一講解三種動畫。
幀動畫顧名思義就是通過順序一幀一幀播放圖片從而產生動畫效果,效果類似放電影。該動畫缺點比較明顯,就是如果圖片過大過多會導致OOM。幀動畫xml文件放置在drawable目錄下而非anim文件夾下。
補間動畫是通過對view進行旋轉、縮放、漸變、透明度變化,而達到的一種動畫效果。是一種漸進式動畫。並且可以通過組合以上四種操作,完成復雜的自定義動畫效果。缺點就是只是改變的view的展示狀態,但是不會改變view的位置。例如我們將一個button通過位移想左移動100dp,然後停留在終點。但是我們可以發現展示的位置button點擊無效果,不可以交互。而在button原始位置空白的地方點擊會觸發button的點擊效果。也就是button本質還是在原來位置,只是展示左移了100dp。
透明度動畫,通過改變view的透明度展示動畫。對應AlphaAnimation和<alpha>xml標簽
縮放動畫,通過修改view的大小展示動畫。對應ScaleAnimation類和<scale>xml表情
通過旋轉view展示動畫。對應RotateAnimation類和<rotate>xml標簽
平移動畫,更改view的展示位置展示動畫。對應TranslateAnimation類和<translate>xml表情
應用動畫xml配置
使用java類配置動畫,具體參數類同xml參數,建議使用xml配置動畫
屬性動畫本質是通過改變對象的屬性(例如:x,y等屬性),來實現動畫的,所以基本上是無所不能的,只要對象有這個屬性,就能實現動畫效果。屬性動畫是在api11的新特性,通過動態的改變view的屬性從而達到動畫效果。雖然可以使用nineoldandroid庫向下兼容,但是兼容本質是使用補間動畫完成,也就是說不會更改view的屬性,也不會更改view的位置。屬性動畫比較常用的類: ValueAnimator、ObjectAnimator、AnimationSet,其中ObjectAnimator是ValueAnimator的子類,而AnminationSet是動畫集合
動畫配置同樣可以使用xml配置,參數類似,這里不做詳細說明。
根據時間流逝百分比計算當前屬性改變百分比。同xml配置動畫中的 android:interpolator 屬性配置,常見有LinearInterpolator(線性差值器)、(加速減速差值器)
等。自定義需要實現 Interpolator 或者 TimeInterpolator 。Interpolator介面繼承TimeInterpolator。
根據當前屬性改變百分比計算改變後的屬性值。屬性動畫特有的屬性。自定義估值器需要實現 TypeEvaluator 介面。
可以對任意屬性做屬性動畫,屬性動畫要求動畫作用的對象提供該屬性的get()和set()方法。因為屬性動畫本質就是根據外界傳遞的對象屬性的初始值和終點值,然後根據估值器和差值器計算屬性值,不斷調用屬性的set方法,通過時間的推移所傳遞的值,越來越近終點值。
注意:
使用ValueAnimator通過監聽動畫過程,自己改變對象屬性完成動畫
『伍』 如何設定Android Activity間切換時的動畫
首先定義好acitivity切換的動畫
<style name="FeelyouWindowAnimTheme" parent="@android:style/Animation.Activity">
<item name="android:activityOpenEnterAnimation">@anim/in_from_left</item>
<item name="android:activityOpenExitAnimation">@anim/out_from_right</item>
<item name="android:activityCloseEnterAnimation">@anim/in_from_right</item>
<item name="android:activityCloseExitAnimation">@anim/out_from_left</item>
</style>
注意需要繼承自 @android:style/Animation.Activity。
4個屬性的意思:
假設我們有 2 個 Activity,分別是 A1 和 A2:
當我們從 A1 啟動 A2 時,A1 從屏幕上消失,這個動畫叫做 android:activityOpenExitAnimation
當我們從 A1 啟動 A2 時,A2 出現在屏幕上,這個動畫叫做 android:activityOpenEnterAnimation
當我們從 A2 退出回到 A1 時,A2 從屏幕上消失,這個叫做 android:activityCloseExitAnimation
當我們從 A2 退出回到 A1 時,A1 出現在屏幕上,這個叫做 android:activityCloseEnterAnimation
定義具體的動畫文件
anim/out_from_right.xml
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:ration="500"
android:fromXDelta="0"
android:fromYDelta="0"
android:toXDelta="100%p"
android:toYDelta="0" >
</translate>
anim/in_from_left.xml
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:ration="500"
android:fromXDelta="-100%p"
android:fromYDelta="0"
android:toXDelta="0"
android:toYDelta="0" >
</translate>
anim/out_from_left.xml
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:ration="500"
android:fromXDelta="0"
android:fromYDelta="0"
android:toXDelta="-100%p"
android:toYDelta="0" >
</translate>
anim/in_from_right.xm
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:ration="500"
android:fromXDelta="100%p"
android:fromYDelta="0"
android:toXDelta="0"
android:toYDelta="0" >
</translate>
最後設定activity的主題的android:windowAnimationStyle
<style name="AnimActivityTheme">
<item name="android:windowAnimationStyle">@style/FeelyouWindowAnimTheme</item>
</style>
注意兩個activity都需要應用相同動畫主題
<activity
android:name="com.test..A1"
android:theme="@style/AnimActivityTheme" >
</activity>
<activity
android:name="com.test.A2"
android:theme="@style/AnimActivityTheme" >
</activity>
『陸』 Android轉場動畫一說
所謂轉場動畫,通俗的講就是一個Activity跳轉到另一個Activity是的動畫。
Activity的轉場動畫很早就有了,5.0之前用的是overridePendingTransition()這個方法。在5.0之後,Google使用Material Design設計風格,進而有了的新的轉場轉場動畫的誕生,效果還是挺炫酷的,下面我們先看下效果。
其實這里主要是靠overridePendingTransition(int enterAnim, int exitAnim)來載入動畫,顧名思義第一個參數是進場動畫,第二個是出場動畫。
這幾個效果是可以交互使用,比如進場用Fade效果,出場用SLide效果。也可以使用自定義的效果,這里不細說。當然5.0後了類似共享元素這類的效果那就另當別論了
說到這里不得不說Google在5.0MD設計中給我提供全新的過度動畫ActivityOptions,以及兼容包ActivityOptionsCompat.下面來說一說它提供幾種過度效果的方法
『柒』 關於設置 android:parentActivityName 後過渡動畫的問題
首先,先簡單介紹一下 android:parentActivityName 。
簡單來說就是在當前 Activity 的標題欄左上角加一個返回按鈕,點擊後自動返回設置的 Activity 而不是回到之前的 Task。
比如為 TestActivity 設置:
<activity android:name=".TestActivity"
android:parentActivityName=".MainActivity"/>
則點擊左上角的返回圖標後將自動回到 MainActivity。
關於 android:parentActivityName 詳見 官方文檔
然而,在設置該屬性後我發現系統在 Activity 切換時的過渡動畫似乎有點不對勁。
首先看圖:
為了更好的演示切換時的過渡動畫,我把 過渡動畫縮放 設置為了 5X 。
可以看到,正常的進入 Activity 應該是新 Activity 從右往左進入並逐漸覆蓋當前Activity。
點擊返回後應該是當前 Activity 從左往右退出,並逐漸顯露出上層 Activity。
例如:圖中的點擊進入 設置界面 和退出 設置界面。
但是,通過在 AndroidManifest 中為 Activity 添加 android:parentActivityName 的方法來返回上層時卻是上層 Activity 從右往左進入並覆蓋當前 Activity,而非正常的當前 Activity 從左往右退出。
例如:圖中點擊進入 關於界面 後退出。
通過以上分析不難得出結論,使用 android:parentActivityName 並非是 finish 當前 Activity 後返回上層,而是新建一個上層 Activity 來覆蓋當前 Activity。
查詢資料得知
所以系統在的過渡動畫給出的是進入 Activity 的動畫而非退出動畫,怪不得總覺得看起來怪怪的。
我個人的解決方案是手動設置 Toolbar,並添加返回按鈕:
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
然後繼承 onOptionsItemSelected ,當點擊 返回 按鈕時手動 finish :
if (id ==android.R.id.home) {
finish();
}
這樣雖然麻煩了點,但至少動畫看起來順眼了點......
如果各位大佬還有更好的方法歡迎指教~
PS:我沒有刻意去設置切換 Activity 的動畫,都是用的系統默認的過渡動畫,所以可能不同的 ROM 動畫效果不一樣(比如我截圖中的 MIUI 是左右滑出滑入,我使用原生安卓測試是上下滑出滑入),但實質都是一樣的。
PPS:寫完才發現原來文檔里用的本來就是 「啟動」 而非 「返回」 Activity......所以說,就因為沒好好看文檔折騰了這么久......