安卓轉場動畫
一、系統自帶動畫效果
假如有 A 和 B 兩個 Activity, 從 A 進入 B,調用
startActivity(Intent(this,AnimCutOutActivity::class.java))
overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out)
- 第一個動畫android.R.anim.fade_in 表示 B 進入時的動畫,第二個動畫android.R.anim.fade_out 表示 A 退出時的動畫。
從 B 退出進入 A, 調用
finish()
overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out)
- 第一個動畫android.R.anim.fade_in 表示重新顯示 A 的動畫
- 第二個動畫android.R.anim.fade_out 表示 B 退出的動畫
1.1 設置無動畫效果
實現:
//進入的動畫
startActivity(Intent(this,AnimCutOutActivity::class.java))
overridePendingTransition(0,0)
//退出時
finish()
overridePendingTransition(0,0)
1.2 淡入淡出
實現:
startActivity(Intent(this,AnimCutOutActivity::class.java))
overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out)
finish()
overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out)
1.3 左右交錯
實現:
startActivity(Intent(this,AnimCutOutActivity::class.java))
overridePendingTransition(android.R.anim.slide_in_left,android.R.anim.slide_out_right)
finish()
overridePendingTransition(android.R.anim.slide_in_left,android.R.anim.slide_out_right)
二、自定義簡單轉場動畫
2.1 淡入淡出
效果和上面系統自帶的淡入淡出一樣。
實現:
startActivity(Intent(this,AnimCutOutActivity::class.java))
overridePendingTransition(R.anim.activity_fade_in,R.anim.activity_fade_out)
finish()
overridePendingTransition(R.anim.activity_fade_in,R.anim.activity_fade_out)
activity_fade_in:
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:fromAlpha="0"
android:toAlpha="1"
android:duration="@android:integer/config_longAnimTime">
</alpha>
activity_fade_out:
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_longAnimTime"
android:fromAlpha="1"
android:toAlpha="0">
</alpha>
2.2 左進右出
實現:
startActivity(Intent(this,AnimCutOutActivity::class.java))
overridePendingTransition(R.anim.activity_slide_left_in,R.anim.activity_slide_right_out)
finish()
overridePendingTransition(R.anim.activity_slide_left_in,R.anim.activity_slide_right_out)
activity_slide_left_in:
<?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"
android:duration="@android:integer/config_mediumAnimTime"/>
<alpha android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="@android:integer/config_mediumAnimTime" />
</set>
activity_slide_right_out:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0" android:toXDelta="100%p"
android:duration="@android:integer/config_mediumAnimTime"/>
<alpha android:fromAlpha="1.0" android:toAlpha="0.0"
android:duration="@android:integer/config_mediumAnimTime" />
</set>
2.3 右進左出
實現:
startActivity(Intent(this,AnimCutOutActivity::class.java))
overridePendingTransition(R.anim.activity_slide_right_in,R.anim.activity_slide_left_out)
finish()
overridePendingTransition(R.anim.activity_slide_right_in,R.anim.activity_slide_left_out)
activity_slide_right_in:
<?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"
android:duration="@android:integer/config_mediumAnimTime"/>
<alpha android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="@android:integer/config_mediumAnimTime" />
</set>
activty_slide_left_out:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0" android:toXDelta="-100%p"
android:duration="@android:integer/config_mediumAnimTime"/>
<alpha android:fromAlpha="1.0" android:toAlpha="0.0"
android:duration="@android:integer/config_mediumAnimTime" />
</set>
2.4 其他效果
基本都類似,有了這些動畫以后就可以自由組合,實現自己想要的結果。下面實現一個常見的動畫效果,進入時右進左出,退出時左進右出,效果如下:
實現:
startActivity(Intent(this,AnimCutOutActivity::class.java))
overridePendingTransition(R.anim.activity_slide_right_in,R.anim.activity_slide_left_out)
finish()
overridePendingTransition(R.anim.activity_slide_left_in,R.anim.activity_slide_right_out)
三、通過windowAnimationStyle來實現
在styles 里的 Activity 主題上加上:
<style name="SlideRightLeft" parent="@android:style/Animation.Activity">
<item name="android:activityOpenEnterAnimation">@anim/activity_slide_right_in</item>
<item name="android:activityOpenExitAnimation">@anim/activity_slide_left_out</item>
<item name="android:activityCloseEnterAnimation">@anim/activity_slide_left_in</item>
<item name="android:activityCloseExitAnimation">@anim/activity_slide_right_out</item>
</style>
調用:
<style name="AppThemeAnim" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/blue_74D3FF</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:windowAnimationStyle">@style/SlideRightLeft</item>
</style>
- 在A啟動B時:
activityOpenEnterAnimation:B進入的動畫
android:activityOpenExitAnimation:A退出的動畫 - 在B后退回A時:
activityCloseEnterAnimation:A重新進入的動畫
activityCloseExitAnimation:B退出的動畫
和代碼實現效果一樣,都是四個動畫。
四、更復雜的動畫效果
這種動畫效果有個庫實現的效果很好,CircularAnim可以看這個庫如何使用,也可以去看源碼如何實現的。一般來說使用系統默認的動畫效果就好,這樣比較符合平時的使用習慣。特殊情況時才考慮去自定義轉場動畫。
智能推薦
Android 安卓動畫 補間動畫 - 縮放動畫
補間動畫之縮放動畫 實現效果:點擊按鈕后實現按鈕放大效果 補間動畫概念:就是從一個畫面過渡到另一個畫面時讓人看到中間動畫效果! 動畫 - 相關文章篇 幀動畫 幀動畫: https://blog.csdn.net/qq_40881680/article/details/82222684 補間動畫 補間動畫-平移動畫: https://blog...
Android 安卓動畫 補間動畫 - 平移動畫
補間動畫之平移動畫 實現效果:向右下方向移動控件 補間動畫概念:就是從一個畫面過渡到另一個畫面時讓人看到中間動畫效果! 動畫 - 相關文章篇 幀動畫 幀動畫: https://blog.csdn.net/qq_40881680/article/details/82222684 補間動畫 補間動畫-平移動畫: https://blog.csd...
Android 安卓動畫 屬性動畫 - 旋轉動畫
引入 屬性動畫的出現,彌補了補間動畫的不足之處,補間動畫,只是改變了表面上的東西,但是其中屬性并未改變,而屬性動畫相反,改變了表面上的東西,并且也更改了其屬性。 類:ObjectAnimator 用于操作屬性動畫的類 動畫 - 相關文章篇 幀動畫 幀動畫: https://blog.csdn.net/qq_40881680/article/details/82222684 &...
Android 安卓動畫 屬性動畫 - 移動動畫
引入 屬性動畫的出現,彌補了補間動畫的不足之處,補間動畫,只是改變了表面上的東西,但是其中屬性并未改變,而屬性動畫相反,改變了表面上的東西,并且也更改了其屬性。 類:ObjectAnimator 用于操作屬性動畫的類 動畫 - 相關文章篇 幀動畫 幀動畫: https://blog.csdn.net/qq_40881680/article/details/82222684 &...
Android 安卓動畫 屬性動畫 - 縮放動畫
引入 屬性動畫的出現,彌補了補間動畫的不足之處,補間動畫,只是改變了表面上的東西,但是其中屬性并未改變,而屬性動畫相反,改變了表面上的東西,并且也更改了其屬性。 類:ObjectAnimator 用于操作屬性動畫的類 動畫 - 相關文章篇 幀動畫 幀動畫: https://blog.csdn.net/qq_40881680/article/details/82222684 &...
猜你喜歡
Android 安卓動畫 屬性動畫 - 組合動畫
引入 屬性動畫的出現,彌補了補間動畫的不足之處,補間動畫,只是改變了表面上的東西,但是其中屬性并未改變,而屬性動畫相反,改變了表面上的東西,并且也更改了其屬性。 類:ObjectAnimator 用于操作屬性動畫的類 動畫 - 相關文章篇 幀動畫 幀動畫: https://blog.csdn.net/qq_40881680/article/details/82222684 &...
[iOS]轉場動畫
iOS 轉場動畫 iOS 轉場動畫詳解 iOS開發中常用的動畫(轉場動畫) 轉場動畫:https://github.com/YanLYM/YMTransitionDemo Demo:https://github.com/Gamin-fzym/AnimatedTransitionsDemo 學習了轉場動畫, 自己寫個demo備份一下. 動畫這塊的算法太麻煩,就直接copy了大佬們寫的代碼, 目前De...
3D游戲編程與設計——游戲對象與圖形基礎章節作業與練習
3D游戲編程與設計——游戲對象與圖形基礎章節作業與練習 3D游戲編程與設計——游戲對象與圖形基礎章節作業與練習 自學資源 作業內容 1、基本操作演練【建議做】 天空盒的制作: 地圖的制作: 整體效果: 2、編程實踐 項目要求: 項目結構: 代碼詳解: Actions: ISSActionCallback.cs SSAction.cs SSAction...
FlycoTabLayout 的使用
FlycoTabLayout 一個Android TabLayout庫,目前有3個TabLayout SlidingTabLayout:參照PagerSlidingTabStrip進行大量修改. 新增部分屬性 新增支持多種Indicator顯示器 新增支持未讀消息顯示 新增方法for懶癌患者 CommonTabLayout:不同于SlidingTabLayout對ViewPager依賴,它是一個不...
爬蟲項目實戰八:爬取天氣情況
爬取天氣情況 目標 項目準備 接口分析 代碼實現 效果顯示 寫入本地 目標 根據天氣接口,爬取接下來一周的天氣情況。 項目準備 軟件:Pycharm 第三方庫:requests,BeautifulSoup,csv 接口地址:http://api.k780.com:88/?app=weather.future&weaid=城市名&appkey=10003&sign=b59bc...