心得體會(huì)
- 有時(shí)候從一而終很重要仪召,我這篇簡(jiǎn)書之前寫了一半靶草,然后因?yàn)闀r(shí)間原因担猛,就隔了好久幕垦,后面想把它補(bǔ)上發(fā)現(xiàn)自己沒有任何思緒,只能把之前的視頻又翻出來看了看~~
目錄
-
1.補(bǔ)間動(dòng)畫簡(jiǎn)介
-
2.XML實(shí)現(xiàn)補(bǔ)間動(dòng)畫
-
3.代碼實(shí)現(xiàn)補(bǔ)間動(dòng)畫
-
4.補(bǔ)間動(dòng)畫的缺點(diǎn)與不足
具體內(nèi)容
一傅联、補(bǔ)間動(dòng)畫簡(jiǎn)介
補(bǔ)間動(dòng)畫(TweenAnimation)
也叫做View
動(dòng)畫
- 1.補(bǔ)間動(dòng)畫只關(guān)心開始和結(jié)束兩個(gè)狀態(tài) 中間的狀態(tài)由系統(tǒng)自動(dòng)補(bǔ)全
- 因?yàn)樗淖饔脤?duì)象是
View
先改,它支持平移、縮放蒸走、旋轉(zhuǎn)和透明度四種變換效果
名稱 |
標(biāo)簽 |
子類 |
效果 |
平移動(dòng)畫 |
<translate> |
TranslateAnimation |
移動(dòng) |
縮放動(dòng)畫 |
<scale> |
ScaleAnimation |
放大或縮小 |
旋轉(zhuǎn)動(dòng)畫 |
<rotate> |
RotateAnimation |
旋轉(zhuǎn) |
透明度動(dòng)畫 |
<alpha> |
AlphaAnimation |
改變透明度 |
二仇奶、XML實(shí)現(xiàn)補(bǔ)間動(dòng)畫
XML實(shí)現(xiàn)補(bǔ)間動(dòng)畫,即通過在XML文件中設(shè)置相關(guān)屬性來達(dá)到動(dòng)畫的效果(補(bǔ)間動(dòng)畫的XML文件必須放置在res/anmi/
文件夾中)
1.在res下創(chuàng)建一個(gè)anim文件
-
1.切換到project目錄
- 2.在
src/main/res/
目錄下new
(新建)Directory
- 3.命名為
anim
,然后返回到Android目錄比驻,新建一個(gè)Animation resource file
2.Animation resource file里面共有屬性
屬性 |
描述 |
fillAfter |
動(dòng)畫結(jié)束后View是否停留在結(jié)束位置该溯,true表示停留在結(jié)束位置 |
duration |
動(dòng)畫的持續(xù)時(shí)間,單位為ms |
startOffset |
動(dòng)畫執(zhí)行延遲的時(shí)間嫁艇,單位為ms |
interpolator |
用于控制動(dòng)畫在不同時(shí)段的執(zhí)行速度朗伶,默認(rèn)是加減速插值器 |
repeatMode |
有兩個(gè)取值:restart和reverse,reverse表示動(dòng)畫正反輪流執(zhí)行步咪,restart表示一直從頭開始執(zhí)行 |
repeatCount |
動(dòng)畫的重復(fù)次數(shù)论皆,默認(rèn)為0,即不重復(fù) |
zAdjustment |
在執(zhí)行動(dòng)畫過程中調(diào)整Z軸的位置猾漫,有三個(gè)取值可選:normal点晴、top和bottom,默認(rèn)為normal |
3.Animation resource file里面各類標(biāo)簽
3.1.set標(biāo)簽
-
<set>標(biāo)簽表示的是動(dòng)畫集合悯周,它可以包含若干個(gè)動(dòng)畫粒督,并且其內(nèi)部也是可以嵌套其他動(dòng)畫集合的。它有兩個(gè)可指定的屬性值如下:
屬性 |
描述 |
interpolator |
表示動(dòng)畫集合所采用的插值器禽翼,默認(rèn)為加減速插值器 |
shareInterpolator |
表示集合中的動(dòng)畫是否和集合共享同一個(gè)插值器屠橄。如果集合不指定插值器族跛,那么子動(dòng)畫就需要單獨(dú)指定所需的插值器或使用默認(rèn)值 |
3.2.translate標(biāo)簽
-
<translate>標(biāo)簽用于控制平移動(dòng)畫,它可以使一個(gè)View在水平/豎直方向上完成平移的動(dòng)畫效果锐墙,它的一系列屬性含義如下表所示:
屬性 |
描述 |
fromXDelta |
表示 x 的起始值 |
toXDelta |
表示 x 的結(jié)束值 |
fromYDelta |
表示 y的起始值 |
toYDelta |
表示 y的結(jié)束值 |
3.3.scale標(biāo)簽
-
<scale>標(biāo)簽表示縮放動(dòng)畫礁哄,它可以使View具有放大/縮小的效果,它的一系列屬性含義如下表所示:
屬性 |
描述 |
fromXScale |
水平方向縮放的起始值 |
toXScale |
水平方向縮放的結(jié)束值 |
fromYScale |
豎直方向縮放的起始值 |
toYScale |
豎直方向縮放的結(jié)束值 |
pivotX |
縮放的軸點(diǎn)的 x 坐標(biāo) |
pivotY |
縮放的軸點(diǎn)的 y 坐標(biāo) |
3.4.rotate標(biāo)簽
-
<rotate>標(biāo)簽表示旋轉(zhuǎn)動(dòng)畫溪北,它可以使View具有旋轉(zhuǎn)的效果桐绒,它的一系列屬性含義如下表所示:
屬性 |
描述 |
fromDegrees |
旋轉(zhuǎn)開始的角度 |
toDegrees |
旋轉(zhuǎn)結(jié)束的角度 |
fromYScale |
豎直方向縮放的起始值 |
pivotX |
旋轉(zhuǎn)的軸點(diǎn)的 x 坐標(biāo) |
pivotY |
旋轉(zhuǎn)的軸點(diǎn)的 y 坐標(biāo) |
3.5.alpha標(biāo)簽
-
<alpha>標(biāo)簽表示透明度動(dòng)畫,它可以改變View的透明度之拨,它的一系列屬性含義如下表所示:
屬性 |
描述 |
fromAlpha |
表示透明度的起始值 |
toAlpha |
表示透明度的結(jié)束值 |
實(shí)例分析:
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:fillAfter="true"
android:repeatMode="reverse">
<!--translate標(biāo)簽:表示View的x坐標(biāo)從0平移到300-->
<translate android:fromXDelta="0"
android:toXDelta="300" />
<!--alpha標(biāo)簽:表示將View的透明度從完全透明變?yōu)橥耆煌该?->
<alpha android:fromAlpha="0"
android:toAlpha="1.0"/>
<!--scale標(biāo)簽:表示將View從原來的0倍放大到原來的1.0倍,以View中心為軸點(diǎn)進(jìn)行縮放(默認(rèn)情況下軸點(diǎn)會(huì)為View的左上角)-->
<scale android:fromXScale="0"
android:toXScale="1.0"
android:fromYScale="0"
android:toYScale="1.0"
android:pivotX="50%"
android:pivotY="50%"
/>
<!--rotate標(biāo)簽:表示View從0°到360°茉继,以View中心為軸點(diǎn)進(jìn)行旋轉(zhuǎn)(默認(rèn)情況下軸點(diǎn)會(huì)為View的左上角)-->
<rotate android:fromDegrees="0"
android:toDegrees="360"
android:pivotX="50%"
android:pivotY="50%"/>
</set>
三、代碼實(shí)現(xiàn)補(bǔ)間動(dòng)畫
- 在Java中蚀乔,
translate烁竭、scale、rotate乙墙、alpha颖变、set
分別對(duì)應(yīng)下面的幾個(gè)類:
1. TranslateAnimation
TranslateAnimation 有三個(gè)構(gòu)造方法來創(chuàng)建對(duì)象,這三個(gè)構(gòu)造方法的說明如下所示:
public TranslateAnimation(Context context, AttributeSet attrs)
參數(shù) |
含義 |
context |
上下文對(duì)象 |
attrs |
xml中讀取的屬性設(shè)置 |
public TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)
參數(shù) |
含義 |
fromXDelta |
動(dòng)畫開始時(shí)x的取值听想,單位為px |
toXDelta |
動(dòng)畫結(jié)束時(shí)x的取值腥刹,單位為px |
fromYDelta |
動(dòng)畫開始時(shí)y的取值,單位為px |
toYDelta |
動(dòng)畫結(jié)束時(shí)y的取值汉买,單位為px |
public TranslateAnimation(int fromXType, float fromXValue, int toXType, float toXValue,
int fromYType, float fromYValue, int toYType, float toYValue)
參數(shù) |
含義 |
fromXType |
動(dòng)畫開始時(shí)x的取值類型 |
fromXValue |
動(dòng)畫開始時(shí)x的取值衔峰,其取值受fromXType影響 |
toXType |
動(dòng)畫結(jié)束時(shí)x的取值,其取值受toXType影響 |
toXValue |
動(dòng)畫結(jié)束時(shí)x的取值蛙粘,其取值受toXType影響 |
fromYType |
動(dòng)畫開始時(shí)y的取值類型 |
fromYValue |
動(dòng)畫開始時(shí)y的取值垫卤,其取值受fromYType影響 |
toYType |
動(dòng)畫結(jié)束時(shí)y的取值,其取值受toYType影響 |
toYValue |
t動(dòng)畫結(jié)束時(shí)y的取值出牧,其取值受toYType影響 |
- 在這個(gè)構(gòu)造方法中穴肘,Type 的取值有如下三個(gè),它們的描述如下表所示:
Type |
描述 |
Animation.ABSOLUTE |
取絕對(duì)值舔痕,所取值表示像素值的大小评抚,單位為px |
Animation.RELATIVE_TO_SELF |
相對(duì)自身的百分比取值,所取值表示相對(duì)自身長(zhǎng)/寬的百分比 |
Animation.RELATIVE_TO_PARENT |
相對(duì)父布局的百分比取值伯复,所取值表示相對(duì)父布局長(zhǎng)/寬的百分比 |
2. ScaleAnimation
ScaleAnimation有4個(gè)構(gòu)造方法來創(chuàng)建對(duì)象慨代,它們的說明如下所示:
public ScaleAnimation(Context context, AttributeSet attrs)
參數(shù) |
含義 |
context |
上下文對(duì)象 |
attrs |
xml中讀取的屬性設(shè)置 |
public ScaleAnimation(float fromX, float toX, float fromY, float toY)
參數(shù) |
含義 |
fromX |
x開始時(shí)的縮放比例 |
toX |
x結(jié)束時(shí)的縮放比例 |
fromY |
y開始時(shí)的縮放比例 |
toY |
y結(jié)束時(shí)的縮放比例 |
public ScaleAnimation(float fromX, float toX, float fromY, float toY,
float pivotX, float pivotY)
參數(shù) |
含義 |
fromX |
x開始時(shí)的縮放比例 |
toX |
x結(jié)束時(shí)的縮放比例 |
fromY |
y開始時(shí)的縮放比例 |
toY |
y結(jié)束時(shí)的縮放比例 |
pivotX |
縮放軸點(diǎn)的x坐標(biāo),單位為px |
pivotY |
縮放軸點(diǎn)的y坐標(biāo)啸如,單位為px |
public ScaleAnimation(float fromX, float toX, float fromY, float toY,
int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
參數(shù) |
含義 |
fromX |
x開始時(shí)的縮放比例 |
toX |
x結(jié)束時(shí)的縮放比例 |
fromY |
y開始時(shí)的縮放比例 |
toY |
y結(jié)束時(shí)的縮放比例 |
pivotXType |
縮放軸點(diǎn)x的取值類型 |
pivotXValue |
縮放軸點(diǎn)的x的取值侍匙,其取值受pivotXType影響 |
pivotYType |
縮放軸點(diǎn)y的取值類型 |
pivotYValue |
縮放軸點(diǎn)的y的取值,其取值受pivotYType影響 |
3. RotateAnimation
RotateAnimation 同樣有4個(gè)方法來創(chuàng)建對(duì)象叮雳,說明如下所示:
public RotateAnimation(Context context, AttributeSet attrs)
參數(shù) |
含義 |
context |
上下文對(duì)象 |
attrs |
xml中讀取的屬性設(shè)置 |
public RotateAnimation(float fromDegrees, float toDegrees)
參數(shù) |
含義 |
fromDegrees |
開始旋轉(zhuǎn)時(shí)的角度值 |
toDegrees |
旋轉(zhuǎn)結(jié)束時(shí)的角度值 |
public RotateAnimation(float fromDegrees, float toDegrees, float pivotX, float pivotY)
參數(shù) |
含義 |
fromDegrees |
開始旋轉(zhuǎn)時(shí)的角度值 |
toDegrees |
旋轉(zhuǎn)結(jié)束時(shí)的角度值 |
pivotX |
軸點(diǎn)的x坐標(biāo)想暗,單位為px |
pivotY |
軸點(diǎn)的y坐標(biāo)妇汗,單位為px |
public RotateAnimation(float fromDegrees, float toDegrees, int pivotXType, float pivotXValue,
int pivotYType, float pivotYValue)
參數(shù) |
含義 |
fromDegrees |
開始旋轉(zhuǎn)時(shí)的角度值 |
toDegrees |
旋轉(zhuǎn)結(jié)束時(shí)的角度值 |
pivotXType |
軸點(diǎn)x的取值類型 |
pivotXValue |
軸點(diǎn)的x的取值,其取值受pivotXType影響 |
pivotYType |
軸點(diǎn)y的取值類型 |
pivotYValue |
軸點(diǎn)的y的取值说莫,其取值受pivotYType影響 |
4. AlphaAnimation
AlphaAnimation 應(yīng)當(dāng)是這所有動(dòng)畫類型里面最為簡(jiǎn)單的了铛纬,它只有以下兩個(gè)構(gòu)造方法:
public AlphaAnimation(Context context, AttributeSet attrs)
參數(shù) |
含義 |
context |
上下文對(duì)象 |
attrs |
xml中讀取的屬性設(shè)置 |
public AlphaAnimation(float fromAlpha, float toAlpha)
參數(shù) |
含義 |
fromAlpha |
動(dòng)畫開始時(shí)的透明度,0表示完全透明唬滑,1表示完全不透明 |
toAlpha |
動(dòng)畫結(jié)束時(shí)的透明度,0表示完全透明棺弊,1表示完全不透明 |
代碼創(chuàng)建補(bǔ)間動(dòng)畫小例子
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<View
android:id="@+id/iv_anim"
android:layout_width="200dp"
android:layout_height="200dp"
android:background="@color/colorAccent"/>
</RelativeLayout>
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if(event.getAction()==MotionEvent.ACTION_DOWN){
//1.找到需要?jiǎng)赢嫷目丶? View v =findViewById(R.id.iv_anim);
//2.創(chuàng)建動(dòng)畫
//AlphaAnimation alpha=new AlphaAnimation(0,1);
//alpha.setDuration(1000);
//alpha.setFillAfter(true);
RotateAnimation rotate=new RotateAnimation(0,360,(float)(0.5*v.getWidth()),(float)(0.5*v.getHeight()));
rotate.setDuration(1000);
// v.startAnimation(alpha);
//3.開啟動(dòng)畫
v.startAnimation(rotate);
}
return true;
}
}
四晶密、補(bǔ)間動(dòng)畫的缺點(diǎn)與不足
-
1.沒有改變View的屬性:補(bǔ)間動(dòng)畫只是改變視覺效果,例如將一個(gè)按鈕移動(dòng)到某個(gè)位置之后模她,點(diǎn)擊移動(dòng)后的按鈕并無響應(yīng)點(diǎn)擊事件稻艰,而點(diǎn)擊按鈕移動(dòng)前的位置則響應(yīng)了點(diǎn)擊事件,說明View只是改變了視覺效果侈净,并沒有改變實(shí)際位置
-
2.作用對(duì)象的局限性: 補(bǔ)間動(dòng)畫的作用對(duì)象只能是View尊勿,無法對(duì)非View的對(duì)象進(jìn)行動(dòng)畫操作
-
3.動(dòng)畫效果單一:補(bǔ)間動(dòng)畫只能出現(xiàn)平移、縮放畜侦、旋轉(zhuǎn)元扔、透明度等簡(jiǎn)單的功能,一旦遇到相對(duì)復(fù)雜的動(dòng)畫效果,即超出了上述4種動(dòng)畫效果旋膳,那么補(bǔ)間動(dòng)畫則無法實(shí)現(xiàn)澎语。