package com.mcxtzhang.cstviewdemo.widget;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.util.AttributeSet;
import android.view.View;
import com.mcxtzhang.cstviewdemo.outpututils.PathAnimHelper;
public class ErrorView extends View {
private Paint mPaint;
private Path mPath;
//private PathMeasure mPathMeasure;
private Path dstPath;
public ErrorView(Context context, AttributeSet attrs) {
super(context, attrs);
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setStrokeWidth(10);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setColor(Color.BLACK);
mPath = new Path();
mPath.moveTo(100, 100);
mPath.rLineTo(100, 100);
mPath.moveTo(200, 100);
mPath.rLineTo(-100, 100);
mPath.moveTo(400, 100);
mPath.lineTo(500, 100);
//mPathMeasure = new PathMeasure();
dstPath = new Path();
setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//startAnim();
new PathAnimHelper(ErrorView.this, mPath, dstPath).startAnim();
}
});
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
mPaint.setColor(Color.WHITE);
canvas.drawPath(mPath, mPaint);
mPaint.setColor(Color.BLACK);
canvas.drawPath(dstPath, mPaint);
}
/*
public void startAnim() {
//这里每次都重置,因为每次点击就都可以看到效果
dstPath.reset();
dstPath.lineTo(0, 0);
mPathMeasure.setPath(mPath, false);
doAnim();
}
private void doAnim() {
ValueAnimator mValueAnimator = ValueAnimator.ofFloat(0.0f, 1.0f);
mValueAnimator.setInterpolator(new LinearInterpolator());
mValueAnimator.setDuration(200);
mValueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
float value = (float) animation.getAnimatedValue();
//19版本之前要想看到效果最简单的方法就是使用rLineTo(0,0)
dstPath.rLineTo(0, 0);
//获取一个段落
mPathMeasure.getSegment(0, mPathMeasure.getLength() * value, dstPath, true);
invalidate();
}
});
mValueAnimator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
//绘制完一条线之后,再绘制另外一条线
mPathMeasure.nextContour();
if (mPathMeasure.getLength() != 0) {
doAnim();
}
Log.e("TAG", "onAnimationEnd: ");
}
});
mValueAnimator.start();
}*/
}