1. 属性动画流程图如下
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 第一个字母变成大写 S
char firstLetter = Character.toUpperCase(propertyName.charAt(0));
// 截取 propertyName 从第一个字母到最后一个字母 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();
属性动画就是:只要一调用 imageview.start()方法,会不断的调用 image.setScaleX()方法
- mSetter.invoke(target,mTmpValueArray);
属性动画说白了就是,android的 jni层 每隔 16ms 不断的回调 ObjectAnimator 的 doAnimationFrame()方法,最终其实就是通过反射方法invoke() 去调用 view.setXxx()方法:
比如:view.setScaleX(1f)、view.setTranslationY(0.5f);