package com.hht.floatbar.util;

import android.animation.TypeEvaluator;
import android.graphics.Point;

/**
 * @author Realmo
 * @version 1.0.0
 * @name BezierEvaluator
 * @email [email protected]
 * @time 2018/1/3 13:52
 * @describe  自定义贝塞尔曲线动画估值器
 */
public class BezierEvaluator implements TypeEvaluator<Point> {

    //控制点
    private Point controllPoint;

    private Point curPoint;

    public BezierEvaluator(){
        curPoint = new Point();
    }

    public BezierEvaluator(Point controllPoint){
        curPoint = new Point();
        this.controllPoint = controllPoint;
    }

    public void setControllPoint(Point controllPoint) {
        this.controllPoint = controllPoint;
    }

    public void setControllPoint(int x,int y){
        if(controllPoint == null){
            controllPoint = new Point();
        }
        controllPoint.set(x,y);
    }

    @Override
    public Point evaluate(float t, Point startValue, Point endValue) {
        int x = (int) ((1 - t) * (1 - t) * startValue.x + 2 * t * (1 - t) * controllPoint.x + t * t * endValue.x);
        int y = (int) ((1 - t) * (1 - t) * startValue.y + 2 * t * (1 - t) * controllPoint.y + t * t * endValue.y);
        curPoint.set(x, y);
        return curPoint;
    }
}