package com.basic.security.widget; import android.animation.ValueAnimator; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.AttributeSet; import android.view.animation.LinearInterpolator; import com.basic.security.R; import com.basic.security.base.BaseApplication; public class ScannerView extends BaseShapeView { public float value; private Paint mPaint; private ValueAnimator anim; public ScannerView(Context context) { super(context); init(); } public ScannerView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public ScannerView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } private void init() { setLayerType(LAYER_TYPE_SOFTWARE, null); mPaint = new Paint(); mPaint.setColor(Color.parseColor("#74F8F5")); mPaint.setStrokeWidth(BaseApplication.getApplication().activity.getResources().getDimension(R.dimen.h3)); startAnimation(); } protected void onDraw(Canvas canvas) { super.onDraw(canvas); int width = this.getWidth(); canvas.drawLine(0, value, width, value + 1, mPaint); } public void startAnimation() { anim = ValueAnimator.ofFloat(0, (int) BaseApplication.getApplication().activity.getResources().getDimension(R.dimen.h310)); anim.setRepeatCount(ValueAnimator.INFINITE); anim.setDuration(2000); anim.setInterpolator(new LinearInterpolator()); anim.addUpdateListener(animation -> { value = (Float) animation.getAnimatedValue(); postInvalidate(); }); anim.start(); } }