1. 概述
上一节我们分析了策略设计模式的定义、案例分析及策略模式在开发中的使用场景和源码中的使用场景,那么这节我们就来分析下属性动画的源码,因为上一节中我们也提到了在属性动画的源码中的 setInterpolator用到了 策略设计模式。
2. 如果让你去写属性动画,该怎样去实现?
下边是最基本的属性动画实现的代码:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView imageView = null ;
ObjectAnimator animator = ObjectAnimator.ofFloat(imageView , "scaleX" , 0f , 1f , 2f) ;
animator.setInterpolator(new DecelerateInterpolator());
animator.setDuration(4000).start();
}
}
根据上边的代码可知:
- 如果要你实现属性动画,该如何实现?
开一个线程,不断的调用 setScale() 方法,传的值是后面的 0f,1f,2f参数; - 如何才能调用到 imageView 的 setScaleX() 方法?
可以通过反射调用;
3. 分析部分源码
1>:
ObjectAnimator animator = ObjectAnimator.ofFloat(imageView , "scaleX" , 0f , 1f , 2f) ;
上边代码意思就是:
new了一个 ObjectAnimator 对象,设置了两个变量 mTarget和 mPropertyName,然后调用了 setFloatValues()方法 把后边传递的 float参数 封装成了 PropertyValuesHolder,ValuesHolder里边是 FloatKeyFrame数组;
setInterpolator() 和 setDuration()只是给 ObjectAnimator 属性设置了值
属性动画具体源码分析可以参照这篇文章
属性动画源码分析