1. 屬性動畫流程圖如下

圖片.png
2. 屬性動畫源碼
// prefix = set,propertyName = scaleX
static String getMethodName(String prefix, String propertyName) {
if (propertyName == null || propertyName.length() == 0) {
// shouldn't get here
return prefix;
}
// 把 propertyName 第一個(gè)字母變成大寫 S
char firstLetter = Character.toUpperCase(propertyName.charAt(0));
// 截取 propertyName 從第一個(gè)字母到最后一個(gè)字母 caleX
String theRest = propertyName.substring(1);
// 返回方法名 = set+S+caleX = setScaleX
return prefix + firstLetter + theRest;
}
- 分析屬性動畫
ImageView imageView = null ;
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(imageView , "scaleX" , 1f) ;
objectAnimator.setDuration(3000) ;
objectAnimator.start();
屬性動畫就是:只要一調(diào)用 imageview.start()方法,會不斷的調(diào)用 image.setScaleX()方法
- mSetter.invoke(target,mTmpValueArray);
屬性動畫說白了就是,android的 jni層 每隔 16ms 不斷的回調(diào) ObjectAnimator 的 doAnimationFrame()方法,最終其實(shí)就是通過反射方法invoke() 去調(diào)用 view.setXxx()方法:
比如:view.setScaleX(1f)、view.setTranslationY(0.5f);