一、要做什么
项目需要实现的效果:小球坠落
1. 首先绘制小球--自定义View 绘制圆;
2. 模拟小球坠落--属性动画,重绘小球轨迹;
3. 修改小球颜色--实现自定义TypeEvaluator;
实现的简单效果如下:
二、思考怎么做
实现步骤如下:
1、自定义 AnimPointView:
/**
* Created by Troy on 2017/3/20.
*
* 通过对对象进行值操作来实现动画效果的功能,这就是ValueAnimator的高级用法
*/
public class AnimPointView extends View {
public static final float sRADIUS = 20F;
private Point mCurrentPoint;
private Paint mPaint;
private Paint mTextPaint;
//动画持续时间 默认5S
private int mAnimDuration;
private int mDefaultAnimDuration = 5;
//小球序号
private String mBallText;
private String mDefaultBallText = "1";
//初始颜色
private String mBallStartColor;
private String mDefaultBallStartColor = "#0000FF";
//结束颜色
private String mBallEndColor;
private String mDefaultBallEndColor = "#FF0000";
public AnimPointView(Context context) {
super(context);
init();
}
public AnimPointView(Context context, AttributeSet attrs) {
super(context, attrs);
//自定义属性
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.Ball);
mAnimDuration = typedArray.getInt(R.styleable.Ball_anim_duration, mDefaultAnimDuration);
mBallText = typedArray.getString(R.styleable.Ball_ball_text);
mBallStartColor = typedArray.getString(R.styleable.Ball_start_color);
mBallEndColor = typedArray.getString(R.styleable.Ball_end_color);
if(TextUtils.isEmpty(mBallText)){
mBallText = mDefaultBallText;
}
if(TextUtils.isEmpty(mBallStartColor)){
mBallStartColor = mDefaultBallStartColor;
}
if(TextUtils.isEmpty(mBallEndColor)){
mBallEndColor = mDefaultBallEndColor;
}
//回收typedArray
typedArray.recycle();
init();
}
public AnimPointView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init(){
//画圆的画笔
mPaint =