動畫的分類
一、視圖動畫
動畫的監聽器 animation.setAnimationListener(new AnimationListener() { });
(一)幀動畫(必須針對ImageView來做的)
定義: 一幀一幀的。很多靜態圖片不斷切換的效果。就是圖片的切換效果。類似gif動圖。
使用:
(1)創建資源文件
在res/drawable以animation-list作為根節點
屬性oneshot:是否重復
子節點設置要顯示的圖片(drawable)和時間(duration)
frame.xml代碼:
android:oneshot="false">
(2)java代碼中使用步驟
//設置圖片空間的背景資源
img.setBackgroundResource(R.drawable.frame);
//獲取到靜態圖片
Drawable?drawable?=?img.getBackground();
//強制轉變成動態圖
AnimationDrawable?animationDrawable?=?(AnimationDrawable)?drawable;
//啟動動態圖片
animationDrawable.start();
(二)補間動畫(操作的控件是任意的)
本質上控件還是在原位置,只是它的試圖在改變。
定義:知道開始和結束,將中間的過程給補充起來。
組件從初始狀態變成結束狀態,為了讓改變看起來更自然更平滑的的一種動畫
使用:
1.平移TranslateAnimation
方法一、
(1)創建資源文件
在res文件下創建anim文件以translate作為根節點
屬性:
android:fromXDelta? ? ? x的初始位置:原位置的x坐標+參數
android:toXDelta="100"? ? x的結束位置:原位置的x坐標+參數(像素點)
注:x坐標向右伸展,y坐標向下伸展
android:duration? ? 動畫展示的時間
android:fillAfter? ? ? ? 讓動畫保持平移后的狀態
android:repeatCount? ? ? ? 重復的次數? ? infinite? ? 一直重復移動
android:repeatMode? ? ? ? 重復的模式
reverse? ? 來回重復(倒序)
restart? ? 重新開始(默認的)
(2)java代碼中使用步驟:
//把一個動畫的資源文件加載成一個動畫類
Animation?animation?=?AnimationUtils.loadAnimation(this,?R.anim.mytranslate);
TranslateAnimation?tAnimation?=?(TranslateAnimation)?animation;?//可以不寫
//啟動一個控件展示動畫
img.startAnimation(tAnimation);
方法二、使用構造方法
TranslateAnimation animation = new TranslateAnimation(0, 100, 0, 0);
/**
*?RELATIVE_TO_SELF:當前的x,y的坐標長度是相對于自己
*?RELATIVE_TO_PARENT:當前的x,y的坐標長度是相對于當前控件的父控件
*?0:原位置
*?1:原控件的1倍
*/
animation?=?new?TranslateAnimation(
Animation.RELATIVE_TO_SELF,?0,
Animation.RELATIVE_TO_PARENT,?0.5f,???//這里的0.5f是倍數(浮點型)
Animation.RELATIVE_TO_SELF,?0,
Animation.RELATIVE_TO_SELF,?0);
animation.setDuration(2000);????//設置時間
img.startAnimation(animation);
2.縮放ScaleAnimation
方法一、
(1)創建資源文件,在res/anim文件以scale作為根節點
屬性:
縮放的倍數
android:fromXScale="1", android:fromYScale="1"? ? 初始的x,y的坐標:原來x,y的坐標 * 參數
android:pivotX="50%", android:pivotY="50%"? ? 縮放點的x,y坐標
(2)java代碼中:
Animation animation = AnimationUtils.loadAnimation(this, R.anim.myscale);
img.startAnimation(animation);
方法二、使用構造方法
/**
*?fromX:縮放的倍數(默認縮放的中心點:左上角)
*?pointX:縮放的中心位置(偏移量):偏移量=原來的x的坐標+參數
*?Animation.RELATIVE_TO_SELF,?0.5f????x+控件的寬度*0.5
*?Animation.RELATIVE_TO_PARENT,?0.5f????x+手機屏幕的寬度*0.5
*/
ScaleAnimation?animation?=?new?ScaleAnimation(0,?1,?0,?1);
animation?=?new?ScaleAnimation(0,?1,?0,?1,img.getWidth()/2,?img.getHeight()/2);
animation?=?new?ScaleAnimation(1,?0,?1,?0,
Animation.RELATIVE_TO_SELF,?0.5f,
Animation.RELATIVE_TO_SELF,?0.5f);
3.透明AlphaAnimation
方法一、
(1)創建資源文件
在res/anim文件以alpha作為根節點
屬性:
android:fromAlpha="1"? ? ? ? 開始的透明度(0~1之間)
android:toAlpha="0.5"? ? 結束的透明度
(2)java代碼中:
Animation animation = AnimationUtils.loadAnimation(this, R.anim.myalpha);
img.startAnimation(animation);
方法二、使用構造方法
AlphaAnimation animation = new AlphaAnimation(1, 0.3f); //開始和結束的透明度值[0,1]
4.旋轉RotateAnimation
和"縮放"類似
5.幾種動畫一起
AnimationSet set = new AnimationSet(false);
//false,各自用自己的頻率,如果為true,表示都用父控件的頻率
//添加動畫類型,可以同時添加多個
set.addAnimation(animation);
set.addAnimation(animation);
img.startAnimation(set);
二、屬性動畫 property animation
動畫的監聽器 animation.addListener(new AnimatorListener() { });
方法一、
(1)創建資源文件
在res/animator文件以objectAnimator作為根節點
屬性:
android:propertyName="translationY"? ? 設置動畫的類型
android:valueFrom="0"? ? 設置移動的初始位置
android:valueTo="100"? ? 設置移動的結束位置
android:valueType="floatType"
(2)java代碼中:
//通過一個動畫資源加載器去加載一個動畫XML文件
ObjectAnimator?oa?=?(ObjectAnimator)?AnimatorInflater
.loadAnimator(this,?R.animator.myobjectanimator);
//綁定動畫的執行者
oa.setTarget(img);
oa.start();
方法二、使用構造方法
/**
*?????img:動畫的執行者
*?????translationX:動畫的名字
*?????0,100:執行動畫的可變參數(中間可以有多個)
*/
//????????img.setTranslationX(translationX); ? ?平移
//????????img.setScaleX(scaleX); ? ?縮放
//????????img.setAlpha(alpha); ? ?透明
//????????img.setRotationX(rotation); ? ?旋轉
ObjectAnimator?animator?=?ObjectAnimator.ofFloat(img,?"translationX",?0,50,0,100);
animator.setDuration(2000);
animator.start();
幾種動畫一起:
AnimatorSet?set?=?new?AnimatorSet();
set.playTogether(oa1,oa2);??//一起執行
// ? ?set.playSequentially(oa1,oa2);??//按照順序執行
set.start();