package com.tomandjerry.coolanim.lib.letter;
import android.animation.ValueAnimator;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.RectF;
import com.tomandjerry.coolanim.lib.Config;
/**
* Created by Weiwu on 16/2/19.
*/
public class ALetter extends Letter {
private Paint mPaint;
private RectF mRectF;
//圆角度起点
private int mStartAngle = 0;
//变化角度
private int mSweepAngle = 0;
//字母边长
private int mLength = 120;
//线粗
private int mStrokeWidth = 20;
private ValueAnimator mAnimator;
private Point mFirPoint;
private Point mSecPoint;
public ALetter(int x, int y) {
super(x, y);
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mPaint.setColor(Config.WHITE);
mPaint.setStrokeWidth(mStrokeWidth);
mPaint.setStyle(Paint.Style.STROKE);
//除去线粗带来的偏差
int offsetSub = mLength / 2 - mStrokeWidth / 2;
//对其圆右边内边位置
mFirPoint = new Point(mCurX + offsetSub, mCurY + mLength / 2);
mSecPoint = new Point(mFirPoint);
//圆向内偏移
mRectF = new RectF(mCurX - offsetSub, mCurY - offsetSub, mCurX + offsetSub, mCurY + offsetSub);
}
@Override
public void startAnim() {
mAnimator = ValueAnimator.ofFloat(0, 1).setDuration(mDuration);
mAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
float factor = (float) animation.getAnimatedValue();
//竖线
mSecPoint.y = (int) (mFirPoint.y - mLength * factor);
if (factor > 0.5f) {
//中点处开始画圆
float zoroToOne = (factor - 0.5f) * 2;
mSweepAngle = -(int) (360 * zoroToOne);
}
}
});
mAnimator.start();
}
@Override
public void drawSelf(Canvas canvas) {
//竖线
canvas.drawLine(mFirPoint.x, mFirPoint.y, mSecPoint.x, mSecPoint.y, mPaint);
//圆
canvas.drawArc(mRectF, mStartAngle, mSweepAngle, false, mPaint);
}
}