package com.tomandjerry.coolanim.lib.letter; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.ValueAnimator; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Path; import android.graphics.Point; import android.util.Log; import com.tomandjerry.coolanim.lib.Config; /** * Created by Weiwu on 16/2/19. */ public class LLetter extends Letter { private Paint mPaint; //L上面的点 private Point mFirstPoint; //转折处的点 private Point mSecondPoint; //结尾点 private Point mThirdPoint; //竖线 private ValueAnimator mFirstLineAnimator; //横线 private ValueAnimator mSecondLineAnimator; private int mStrokeWidth = 20; private int mLength = 140; private int mWidth = 80; //横线画完的标志 private boolean mIsFirstFinish = false; public LLetter(int x, int y) { super(x, y); mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mPaint.setColor(Config.WHITE); mPaint.setStyle(Paint.Style.FILL); mPaint.setStrokeWidth(mStrokeWidth); mFirstPoint = new Point(x - mWidth / 2 + mStrokeWidth / 2, y - mLength / 4 * 3); mSecondPoint = new Point(mFirstPoint); mThirdPoint = new Point(x - mWidth / 2 + mStrokeWidth / 2, y + mLength / 4 + mStrokeWidth / 2); } @Override public void startAnim() { mFirstLineAnimator = ValueAnimator.ofFloat(0, 1).setDuration(mDuration / 2); mFirstLineAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { float factor = (float) animation.getAnimatedValue(); mSecondPoint.y = (int) (mFirstPoint.y + (mLength + mStrokeWidth) * factor); } }); mFirstLineAnimator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { mIsFirstFinish = true; mSecondLineAnimator.start(); } }); mSecondLineAnimator = ValueAnimator.ofFloat(0, 1).setDuration(mDuration / 2); mSecondLineAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { float factor = (float) animation.getAnimatedValue(); mThirdPoint.x = (int) (mSecondPoint.x + mWidth * factor); } }); mFirstLineAnimator.start(); } @Override public void drawSelf(Canvas canvas) { canvas.drawLine(mFirstPoint.x, mFirstPoint.y, mSecondPoint.x, mSecondPoint.y, mPaint); if (mIsFirstFinish) { //减去了线粗导致的偏移 canvas.drawLine(mSecondPoint.x - mStrokeWidth / 2, mSecondPoint.y - mStrokeWidth / 2, mThirdPoint.x, mThirdPoint.y, mPaint); } } }