Note3_公共技術點之 Android 動畫基礎之View動畫

Note3_公共技術點之Android 動畫基礎
來源:http://t.cn/Ry92sKV 公共技術點之Android 動畫基礎

  1. 傳統View動畫(Tween/Frame)
    1.1 Tween 動畫
image.png

文件位置:res/anim/filename.xml
編譯資源的數據類型:an Animation
資源引用:
Java:R.anim.filename
XML:@[package:]anim/filename
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@[package:]anim/interpolator_resource"
android:shareInterpolator=["true" | "false"] >
<alpha
android:fromAlpha="float"
android:toAlpha="float" />
<scale
android:fromXScale="float"
android:toXScale="float"
android:fromYScale="float"
android:toYScale="float"
android:pivotX="float"
android:pivotY="float" />
<translate
android:fromXDelta="float"
android:toXDelta="float"
android:fromYDelta="float"
android:toYDelta="float" />
<rotate
android:fromDegrees="float"
android:toDegrees="float"
android:pivotX="float"
android:pivotY="float" />
<set>
...
</set>
</set>
布局文件必須有一個獨立的根元素,可以是<alpha>,<scale>,<translate>,<rotate>,<set>(持有一組其它的動畫元素,甚至可以是內嵌
的set元素)中的一個
1.1.1 <set>
一個持有其它動畫元素的容器<alpha>, <scale>, <translate>,<rotate>或者其它<set> 元素屬性
android:interpolator
應用于動畫的插值器。該值必須是一個指定了插值器資源的引用(不是一個插值器的類名),在平臺中有缺省的插值器資源可以使用,或
者你可以創建自己的插值器資源,可以看下面關于插值器的討論。
android:shareInterpolator
Boolean 值,true:代表在所有的子元素中共享同一個插值器
1.1.2 <alpha>
A fade-in or fade-out animation. Represents an AlphaAnimation. 一個漸入漸出的動畫,對應的java 類為AlphaAnimation。
屬性
android:fromAlpha
android:toAlpha
代表動畫開始和結束時透明度,0.0 表示完全透明,1.0 表示完全不透明,Float 值
1.1.3 <scale>
可以實現動態調控件尺寸的效果,通過設置pivotX 和pivotY 你可以指定image 縮放的中心點,比如:如果這些值是0,則表示左上
角,所有的縮放變化將沿著右下角的軌跡運動。對應的類為:ScaleAnimation
屬性
android:fromXScale
android:toXScale
android:fromYScale
android:toYScale
Float 值,為動畫起始到結束時,X、Y 坐標上的伸縮尺寸
0.0 表示收縮到沒有
1.0 表示正常無伸縮
android:pivotX
android:pivotY
代表縮放的中軸點X/Y 坐標,浮點值
如果我們想表示中軸點為圖像的中心,我們可以把兩個屬性值定義成0.5 或者50%。
1.1.4 <translate>
代表一個水平、垂直的位移。對應的類為TranslateAnimation. 屬性
android:fromXDelta 屬性代表起始X 方向的位置
android:toXDelta
android:fromYDelta
android:toYDelta 屬性代表起始Y 方向的位置
代表動畫起始或者結束X / Y 方向上的位置,Float 或者百分比值
浮點數num%、num%p 分別相對于自身或者父控件
如果以浮點數字表示,是一個絕對值,代表相對自身原始位置的像素值;
如果以num%表示,代表相對于自己的百分比,比如toXDelta 定義為100%就表示在X 方向上移動自己的1 倍距離
如果以num%p 表示,代表相對于父類組件的百分比。
1.1.5 <rotate>
是旋轉動畫,與之對應的Java 類是RotateAnimation
屬性
android:fromDegrees
android:toDegrees
代表起始和結束的角度,浮點值,單位:度
android:pivotX 屬性代表旋轉中心的X 坐標值
android:pivotY 屬性代表旋轉中心的Y 坐標值
Float 值或者百分比
這兩個屬性也有三種表示方式,但是X 軸都是相對方向都是Left,Y 軸都是相對于Top
浮點數、num%、num%p;
數字方式代表相對于自身左邊緣的像素值,
num%方式代表相對于自身左邊緣或頂邊緣的百分比,
num%p 方式代表相對于父容器的左邊緣或頂邊緣的百分比
屬性
android:fromDegrees
android:toDegrees
開始和結束時的弧度位置,單位是度,Float 值
調用代碼
ImageView image = (ImageView) findViewById(R.id.image);
Animation hyperspaceJump = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
image.startAnimation(hyperspaceJump);
另外,在動畫中,如果我們添加了android:fillAfter="true"后,這個動畫執行完之后保持最后的狀態;android:duration="integer"代
表動畫持續的時間,單位為毫秒。
1.1.6 插值器
用于修改一個動畫過程中的速率,可以定義各種各樣的非線性變化函數,比如加速、減速等
在Android 中所有的插值器都是Interpolator 的子類,通過android:interpolator 屬性你可以引用不同的插值器。下面是幾種插值器:
你可以通過下面的方式使用它們:

image.png

<set android:interpolator="@android:anim/accelerate_interpolator">
...
</set>
自定義插值器如果你對系統提供的插值器不滿意,我們可以創建一個插值器資源修改插值器的屬性,比如修改AnticipateInterpolator
的加速速率,調整CycleInterpolator 的循環次數等。為了完成這種需求,我們需要創建XML 資源文件,然后將其放于/res/anim 下,
然后再動畫元素中引用即可。我們先來看一下幾種常見的插值器可調整的屬性:
<?xml version="1.0" encoding="utf-8"?>
<InterpolatorName xmlns:android="http://schemas.android.com/apk/res/android"
android:attribute_name="value"
/>
我們先來看一下幾種常見的插值器可調整的屬性:
<accelerateDecelerateInterpolator> 無
<accelerateInterpolator> android:factor 浮點值,加速速率,默認為1
<anticipateInterploator> android:tension 浮點值,起始點后退的張力、拉力數,默認為2
<anticipateOvershootInterpolator> android:tension 同上android:extraTension 浮點值,拉力的倍數,默認為1.5(2 * 1.5)
<bounceInterpolator> 無
<cycleInterplolator> android:cycles int,循環的個數,默認為1
<decelerateInterpolator> android:factor 浮點值,減速的速率,默認為1
<linearInterpolator> 無
<overshootInterpolator> 浮點值,超出終點后的張力、拉力,默認為2
比如:res/anim/my_overshoot_interpolator.xml:
<?xml version="1.0" encoding="utf-8"?>
<overshootInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
android:tension="7.0"/>
This animation XML will apply the interpolator:
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@anim/my_overshoot_interpolator"
android:fromXScale="1.0"
android:toXScale="3.0"
android:fromYScale="1.0"
android:toYScale="3.0"
android:pivotX="50%"
android:pivotY="50%"
android:duration="700" />
如果簡單的修改插值器的屬性值還不能夠滿足我們的需求,那么就自己來通過實現Interpolator 接口來定義自己的插值器了因為上面所
有的Interpolator 都實現了Interpolator 接口,這個接口定義了一個方法:float getInterpolation(float input); 此方法由系統調
用,input 代表動畫的時間,在0 和1 之間,也就是開始和結束之間。
線性(勻速)插值器定義如下:
public float getInterpolation(float input) {
return input;
}
加速減速插值器定義如下:
public float getInterpolation(float input) {
return (float)(Math.cos((input + 1) * Math.PI) / 2.0f) + 0.5f;
}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,406評論 6 538
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,034評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,413評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,449評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,165評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,559評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,606評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,781評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,327評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,084評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,278評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,849評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,495評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,927評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,172評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,010評論 3 396
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,241評論 2 375

推薦閱讀更多精彩內容