標籤:

Android之視圖動畫Animation

動畫模式

View Animation主要有兩種動畫模式:

一種是tweened animation(漸變動畫):

XML中:alpha

JavaCode:AlphaAnimation

XML中:scale

JavaCode:ScaleAnimation

一種是frame by frame(畫面轉換動畫)

XML中:translate

JavaCode:TranslateAnimation

XML中:rotate

JavaCode:RotateAnimation

alpha透明度

文件名:my_alpha_action.xml

<?xml version="1.0" encoding="utf-8"?>nhttp://schemas.android.com/apk/res/android"nandroid:fromAlpha="0.1"nandroid:toAlpha="1.0"nandroid:duration="3000"/>n

透明度控制動畫效果 alpha

浮點型值:

fromAlpha 屬性為動畫起始時透明度

toAlpha 屬性為動畫結束時透明度

說明:

0.0表示完全透明

1.0表示完全不透明

以上值取0.0-1.0之間的float數據類型的數字

長整型值:

duration 屬性為動畫持續時間

說明:

時間以毫秒為單位

在程序中引用XML資源核心代碼如下:

Animation mAnimation ;nmAnimation = AnimationUtils.loadAnimation(this, R.anim.anim);nTextView text = (TextView)findViewById(R.id.textview00);ntext.setAnimation(mAnimation);n

AlphaAnimation類對象構造

AlphaAnimation(float fromAlpha, float toAlpha)

第一個參數fromAlpha為 動畫開始時候透明度

第二個參數toAlpha為 動畫結束時候透明度

private AlphaAnimation myAnimation_Alpha;n// 0.0表示完全透明,1.0表示完全不透明nmyAnimation_Alpha=new AlphaAnimation(0.1f, 1.0f);n//設置動畫持續時間,單位為毫秒nmyAnimation_Alpha.setDuration(5000);n

如何使用Java代碼中的動畫效果

public void startAnimation (Animation animation)n

rotate旋轉

文件名: my_rotate_action.xml

<?xml version="1.0" encoding="utf-8"?>nhttp://schemas.android.com/apk/res/android"nandroid:interpolator="@android:anim/accelerate_decelerate_interpolator"nandroid:fromDegrees="0"nandroid:toDegrees="+350"nandroid:pivotX="50%"nandroid:pivotY="50%"nandroid:duration="3000" />n

rotate 旋轉動畫效果

屬性:interpolator 指定一個動畫的插入器

在我試驗過程中,使用android.res.anim中的資源時候發現有三種動畫插入器

accelerate_decelerate_interpolator 加速-減速 動畫插入器

accelerate_interpolator 加速-動畫插入器

decelerate_interpolator 減速- 動畫插入器

其他的屬於特定的動畫效果

浮點數型值:

fromDegrees 屬性為動畫起始時物件的角度

toDegrees 屬性為動畫結束時物件旋轉的角度 可以大於360度

說明:

當角度為負數——表示逆時針旋轉

當角度為正數——表示順時針旋轉

(負數from——to正數:順時針旋轉)

(負數from——to負數:逆時針旋轉)

(正數from——to正數:順時針旋轉)

(正數from——to負數:逆時針旋轉)

pivotX 屬性為動畫相對於物件的X坐標的開始位置

pivotY 屬性為動畫相對於物件的Y坐標的開始位置

說明:

以上兩個屬性值 從0%-100%中取值

50%為物件的X或Y方向坐標上的中點位置

長整型值,時間以毫秒為單位

duration 屬性為動畫持續時間

RotateAnimation類對象構造

RotateAnimation(float fromDegrees, float toDegrees,nint pivotXType, float pivotXValue, int pivotYType, float pivotYValue)n

第一個參數fromDegrees為動畫起始時的旋轉角度

第二個參數toDegrees為動畫旋轉到的角度

第三個參數pivotXType為動畫在X軸相對於物件位置類型

第四個參數pivotXValue為動畫相對於物件的X坐標的開始位置

第五個參數pivotYType為動畫在Y軸相對於物件位置類型

第六個參數pivotYValue為動畫相對於物件的Y坐標的開始位置

//RotateAnimation類對象定義nprivate AlphaAnimation myAnimation_Alpha;nmyAnimation_Rotate=new RotateAnimation(0.0f, +350.0f,nAnimation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF, 0.5f);n//設置動畫持續時間,3000毫秒nmyAnimation_Rotate.setDuration(3000);n

如何使用Java代碼中的動畫效果

public void startAnimation (Animation animation)n

scale尺寸伸縮

文件名: my_scale_action.xml

<?xml version="1.0" encoding="utf-8"?>nhttp://schemas.android.com/apk/res/android">nandroid:interpolator="@android:anim/accelerate_decelerate_interpolator"nandroid:fromXScale="0.0"nandroid:toXScale="1.4"nnandroid:fromYScale="0.0"nandroid:toYScale="1.4"nnandroid:pivotX="50%"nandroid:pivotY="50%"nnandroid:fillAfter="false"nandroid:duration="700" />n

尺寸伸縮動畫效果 scale

屬性:interpolator 指定一個動畫的插入器

在我試驗過程中,使用android.res.anim中的資源時候發現有三種動畫插入器

accelerate_decelerate_interpolator 加速-減速 動畫插入器

accelerate_interpolator 加速-動畫插入器

decelerate_interpolator 減速- 動畫插入器

其他的屬於特定的動畫效果

浮點型值:

fromXScale 屬性為動畫起始時 X坐標上的伸縮尺寸

toXScale 屬性為動畫結束時 X坐標上的伸縮尺寸

fromYScale 屬性為動畫起始時Y坐標上的伸縮尺寸

toYScale 屬性為動畫結束時Y坐標上的伸縮尺寸

說明:

以上四種屬性值

0.0表示收縮到沒有

1.0表示正常無伸縮

值小於1.0表示收縮

值大於1.0表示放大

pivotX 屬性為動畫相對於物件的X坐標的開始位置

pivotY 屬性為動畫相對於物件的Y坐標的開始位置

說明:

以上兩個屬性值 從0%-100%中取值

50%為物件的X或Y方向坐標上的中點位置

長整型值:

duration 屬性為動畫持續時間

說明:

時間以毫秒為單位

布爾型值:

fillAfter 屬性 當設置為true ,該動畫轉化在動畫結束後被應用

ScaleAnimation類對象構造

ScaleAnimation(float fromX, float toX, float fromY, float toY,nint pivotXType, float pivotXValue, int pivotYType, float pivotYValue)n

第一個參數fromX為動畫起始時 X坐標上的伸縮尺寸

第二個參數toX為動畫結束時 X坐標上的伸縮尺寸

第三個參數fromY為動畫起始時Y坐標上的伸縮尺寸

第四個參數toY為動畫結束時Y坐標上的伸縮尺寸

說明:

以上四種屬性值

0.0表示收縮到沒有

1.0表示正常無伸縮

值小於1.0表示收縮

值大於1.0表示放大

第五個參數pivotXType為動畫在X軸相對於物件位置類型

第六個參數pivotXValue為動畫相對於物件的X坐標的開始位置

第七個參數pivotXType為動畫在Y軸相對於物件位置類型

第八個參數pivotYValue為動畫相對於物件的Y坐標的開始位置

private AlphaAnimation myAnimation_Alpha;nmyAnimation_Scale =new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f,nAnimation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);n//設置動畫持續時間,700毫秒nmyAnimation_Scale.setDuration(700);n

如何使用Java代碼中的動畫效果

public void startAnimation (Animation animation)n

translate位置轉移

文件名: my_translate_action.xml

<?xml version="1.0" encoding="utf-8"?>nnhttp://schemas.android.com/apk/res/android">n<translatenandroid:fromXDelta="30"nandroid:toXDelta="-80"nandroid:fromYDelta="30"nandroid:toYDelta="300"nandroid:duration="800"n/>n

translate 位置轉移動畫效果

整型值:

fromXDelta 屬性為動畫起始時 X坐標上的位置

toXDelta 屬性為動畫結束時 X坐標上的位置

fromYDelta 屬性為動畫起始時 Y坐標上的位置

toYDelta 屬性為動畫結束時 Y坐標上的位置

注意:

沒有指定fromXType toXType fromYType toYType 時候,默認是以自己為相對參照物

長整型值:

duration 屬性為動畫持續時間

說明:

時間以毫秒為單位

TranslateAnimation類對象構造

TranslateAnimation(float fromXDelta, float toXDelta,nfloat fromYDelta, float toYDelta)n

第一個參數fromXDelta為動畫起始時 X坐標上的移動位置

第二個參數toXDelta為動畫結束時 X坐標上的移動位置

第三個參數fromYDelta為動畫起始時Y坐標上的移動位置

第四個參數toYDelta為動畫結束時Y坐標上的移動位置

private TranslateAnimation myAnimation_Translate;nmyAnimation_Translate =new TranslateAnimation(0f, 200f,400f, 400f);n//設置動畫持續時間, 2000毫秒nmyAnimation_Translate.setDuration(2000);n

如何使用Java代碼中的動畫效果

public void startAnimation (Animation animation)n

參考

官網:developer.android.com/i

本文原創發佈於微信公眾號「吳小龍同學」,不止於技術分享,不取悅別人,寫給懂的人看~公眾號二維碼

推薦閱讀:

Google Pixel,這個兒子不一樣
高效Android開發者必須知道的4個工具
Android Oreo 中對後台任務的限制
PS4 Remote Play
Google對於 material design 的積極度?

TAG:动画 | Android |