補間(Tween)影片
Android 使用Animation代抽象的影片類,它包括如下幾個子類,
- AlphaAnimation:透明度改變的影片,創建該影片時要指定影片開始時的透明度、結束時的透明度和影片持續時間,其中透明度可從0變化到1,
- ScaleAnimation:大小縮放的影片,創建該影片時要指定影片開始時的縮放比(以X、Y軸的縮放引數來表示)、結束時的縮放比(以X、Y軸的縮放引數來表示),并指定影片持續時間,由于縮放時以不同點為中心的縮放效果并不相同,因此指定縮放影片時還要通過pivotX、pivotY來指定“縮放中心”的坐標,
- TranslateAnimation:位移變化的影片,創建該影片時只要指定影片開始時的位置(以X、Y坐標來表示)、結束時的位置(以X、Y坐標來表示),并指定影片持續時間即可,
- RotateAnimation:旋轉影片,創建該影片時只要指定影片開始時的旋轉角度、結束時的旋轉角度,并指定影片持續時間即可,由于旋轉時以不同點為中心的旋轉效果并不相同,因此指定旋轉影片時還要通過pivotX、pivotY來指定“旋轉軸心”的坐標,
- 一旦為補間影片指定了三個必要資訊,Android就會根據影片的開始幀、結束幀、影片持續時間計算出需要在中間“補入”多少幀,并計算所有補入幀的圖形,當用戶瀏覽補間影片時,他眼中看到的依然是“逐幀影片”,
- 為了控制在影片期間需要動態“補入”多少幀,具體在影片運行的哪些時刻補入幀,需要借助于Interpolator
Interpolator
-
Interpolator 根據特定演算法計算出整個影片所需要動態插入幀的密度和位置,簡單地說,aterpolator負責控制影片的變化速度,這就使得基本的影片效果(AIpha、Scale、Translate Roete能以勻速變化、加速、減速、拋物線速度等各種速度變化,
-
Interpolator是一個介面,它定義了所有Interpolator都需要實作的方法:float getInterpolation(floatimput),開發者完全可以通過實作Interpolator來控制影片的變化速度,
Android為Interpolator提供了如下幾個實作類,分別用于實作不同的影片變化速度,
- LinearInterpolator:影片以均勻的速度改變,
- AccelerateInterpolator:在影片開始的地方改變速度較慢,然后開始加速,
- AccelerateDecelerateInterpolator:在影片開始、結束的地方改變速度較慢,在中間的時候加速,
- CycleInterpolator:影片回圈播放特定的次數,變化速度按正弦曲線改變,
- DecelerateInterpolator:在影片開始的地方改變速度較快,然后開始減速,
為了在影片資源檔案中指定補間影片所使用的 Interpolator,定義補間影片的<set…/>元素支持
一個android:interpolator屬性,該屬性的屬性值可指定為Android默認支持的Interpolator,例如:
@android:anim/linear_interpolator
@android:anim/accelerate_interpolator
@android:anim/accelerate_decelerate_interpolator
……
其實上面的寫法很有規律,它們就是把系統提供的Interpolator實作類的類名的駝峰寫法改為下畫線寫法即可,
一旦在程式中通過AnimationUtils 得到了代表補間影片的Animation 之后,接下來就可呼叫View的startAnimation(Animation anim)方法開始對該View執行影片了,
位移(translate)、旋轉(rotate)、縮放(scale)、透明度(alpha)改變的補間影片
<?xml version="1.0" encoding="utf-8"?>
<!-- 定義影片勻速改變 -->
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/linear_interpolator" >
<translate
android:duration="500"
android:fromYDelta="100%"
android:toYDelta="0%" />
<rotate
android:duration="5000"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="720" />
<scale
android:duration="1000"
android:fillBefore="true"
android:fromXScale="1.0"
android:fromYScale="1.0"
android:pivotX="50%p"
android:pivotY="50%p"
android:toXScale="2.0"
android:toYScale="2.0" />
<rotate
android:duration="1000"
android:fromDegrees="0.5"
android:toDegrees="1" />
</set>
setCustomAnimations方法
setCustomAnimations (int enter, int exit, int popEnter, int popExit),該方法有4個引數:
- 第一個引數enter是指當一個Fragment被添加added 或者系結attached到視圖上,該Fragment進入視圖時的animation或者animator的資源ID;
- 第二個引數exit是指當一個Fragment從視圖上被移除removed或者解除系結detached時,該Fragment移出視圖時的animation或者animator的資源ID;
- 第三個引數popEnter是指當呼叫popBackStack()方法或者類似的方法彈出堆疊頂的Fragment后,Fragment堆疊的堆疊頂Fragment重新被添加readded或重新系結reattached到視圖上時,該Fragment進入視圖時的animation或者animator的資源ID;
- 第四個引數popExit是指當呼叫popBackStack()方法或者類似的方法彈出堆疊頂的Fragment時,該彈出的Fragment即從視圖上被移除removed或者解除系結detached,該Fragment移出視圖時的animation或者animator的資源ID,
getActivity().getSupportFragmentManager().beginTransaction()
.setCustomAnimations(R.anim.comment_down_animation,R.anim.comment_down_animation)
.hide(feedCommentFragment).commitAllowingStateLoss();
getChildFragmentManager().beginTransaction()
.setCustomAnimations(R.anim.comment_fullscreen_anim_enter, R.anim.comment_fullscreen_anim_out)
.show(commentFragment).commitAllowingStateLoss();
tips:setCustomAnimations方法必須成雙出現,要么寫兩個要么寫四個,上面部分代碼表示在Activity、Fragment中加載新的Fragment的影片,
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/273747.html
標籤:其他
上一篇:解決androidStudio中打包運行的時候debug和release簽名不一致
下一篇:2021-04-07
