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.base.BaseApplication; import com.basic.security.utils.ResolutionAdaptation; 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(); } public void setMeasuredDimension1(int measuredWidth, int measuredHeight) { setMeasuredDimension(measuredWidth, measuredHeight); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); } @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); } private void init() { setLayerType(LAYER_TYPE_SOFTWARE, null); mPaint = new Paint(); mPaint.setColor(Color.parseColor("#74F8F5")); mPaint.setStrokeWidth(BaseApplication.getApplication().activity.getResources().getDimension(ResolutionAdaptation.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(com.basic.security.utils.RUtils.R_dimen_h310)); anim.setRepeatCount(ValueAnimator.INFINITE); anim.setDuration(2000); anim.setInterpolator(new LinearInterpolator()); anim.addUpdateListener(animation -> { value = (Float) animation.getAnimatedValue(); postInvalidate(); }); anim.start(); } }