因为ObjectAnimator继承自ObjectAnimator所以以下方法都可以使用
注意:
这里使用到的一定是ObjectAnimator.ofFloat(),而不是ObjectAnimator.ofInt()
ObjectAnimator alpha = ObjectAnimator.ofFloat(tv, "alpha", 1, 0, 1,0.5f,0,1);
alpha.setDuration(3000);
alpha.start();
有参构造
ObjectAnimator.ofFloat(Object target, String propertyName, float… values)
这里因为有大量重复代码,我就把他抽取出来了,非常的简单.
private void setObjectAnimatorOfFloat(String propertyName, float... values) {
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(tv, propertyName, values);
objectAnimator.setDuration(3000);
objectAnimator.start();
}
使用:
setObjectAnimatorOfFloat("rotation",0,180,-360,0);
按照X轴旋转,和rotation使用一样只是旋转的方向不一样
setObjectAnimatorOfFloat("rotationX",0,180,360,0);
按照Y轴旋转,和rotation使用一样只是旋转的方向不一样
setObjectAnimatorOfFloat("rotationY",0,180,360,0)
translationX
setObjectAnimatorOfFloat("translationX",0,180,360,0);
translationY
setObjectAnimatorOfFloat("translationY",0,-180,360,0);
translationX:
translationY:
ScaleX
setObjectAnimatorOfFloat("scaleX",0,1,2,1);
ScaleY
setObjectAnimatorOfFloat("scaleY",0,1,2,1);
scaleX:
scaleY:
定义一个类来记录圆的半径:
public class PointBean {
private int radio;
public int getRadio() {
return radio;
}
public void setRadio(int radio) {
this.radio = radio;
}
public PointBean(int radio) {
this.radio = radio;
}
}
写一个类继承自View:
public class MyPointView extends View {
//初始化圆
public PointBean pointBean = new PointBean(100);
private Paint mPaint;
public MyPointView(Context context) {
super(context);
}
public MyPointView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
mPaint = new Paint();
mPaint.setColor(Color.YELLOW);
mPaint.setStyle(Paint.Style.FILL);
mPaint.setAntiAlias(true);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (mPaint != null) {
canvas.drawCircle(300,300,pointBean.getRadio(),mPaint);
}
}
//需要注意这个set方法
public void setPointBean(int radio){
pointBean.setRadio(radio);
invalidate();
}
}
在布局中使用:
点击按钮使用
//圆形动画开始
button_start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ObjectAnimator pointBean = ObjectAnimator.ofInt(pointView, "PointBean", 0,200, 300, 100);
pointBean.setDuration(3000);
pointBean.start();
// pointView.setPointBean();
}
});
注意:
//需要注意这个set方法
public void setPointBean(int radio){
pointBean.setRadio(radio);
//刷新onDraw
invalidate();
}
}
`
可以通过这个流程图看出,最后调用的set方法,通过反射吧当前值作为参数传进去,这里就把最后一位可变参数,当做参数传给setPointBean()方法
参考问文档链接: 启舰.
git链接: langyangyang.