package dev.hienlt.my; import android.animation.ValueAnimator; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.PorterDuff; import android.graphics.PorterDuffXfermode; import android.graphics.RectF; import android.support.annotation.Nullable; import android.util.AttributeSet; import android.view.View; /** * Created by hien.le on 21/11/2018. */ public class OverlayLayout extends View implements ValueAnimator.AnimatorUpdateListener { private static final String TAG = OverlayLayout.class.getSimpleName(); private Paint paint; private Paint paintLine; private RectF rectF; private int overlayWidth; private int overlayHeight; private ValueAnimator valueAnimator; private float lineY; public OverlayLayout(Context context) { super(context); init(); } public OverlayLayout(Context context, @Nullable AttributeSet attrs) { super(context, attrs); init(); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); overlayWidth = (int) (w * 0.7f); overlayHeight = (int) (overlayWidth * (10 / 16f)); float left = (w - overlayWidth) / 2f; float top = (h - overlayHeight) / 2f; rectF.set(left, top, left + overlayWidth, top + overlayHeight); if (valueAnimator != null) { valueAnimator.setFloatValues(top, top + overlayHeight); valueAnimator.start(); } } private void init() { setLayerType(View.LAYER_TYPE_HARDWARE, null); paint = new Paint(); paint.setColor(Color.WHITE); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); paintLine = new Paint(); paintLine.setColor(Color.WHITE); paintLine.setStyle(Paint.Style.STROKE); paintLine.setStrokeWidth(4); paintLine.setAntiAlias(true); rectF = new RectF(); valueAnimator = new ValueAnimator(); valueAnimator.setRepeatMode(ValueAnimator.REVERSE); valueAnimator.setRepeatCount(ValueAnimator.INFINITE); valueAnimator.setDuration(3000); valueAnimator.addUpdateListener(this); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawColor(Color.argb(170, 0, 0, 0)); canvas.drawRect(rectF, paint); canvas.drawLine(rectF.left, lineY, rectF.right, lineY, paintLine); } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); if (valueAnimator != null) { valueAnimator.cancel(); } } @Override public void onAnimationUpdate(ValueAnimator animation) { lineY = (float) animation.getAnimatedValue(); invalidate(); } }