android呼吸灯效果设计思路
使用颜色渐变,使其边缘灯光区,与背景色无缝连接
使用属性动画,控制呼吸灯的发光
效果图如下:
GIF.gif
代码文件
package com.tian.criminalintent;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ArgbEvaluator;
import android.animation.ValueAnimator;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.RadialGradient;
import android.graphics.Shader;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
/**
* Created by XuZhen on 2019/5/13 18:02
*/
public class BreatheView extends View {
private int mInsideViewWidth = dp2px(getContext(), 70);
private int mInsideViewHeight = dp2px(getContext(), 40);
private int mLightDiffusionWidth = dp2px(getContext(), 20); //扩散区宽度
private int mTextColor = Color.parseColor("#ffffff"); //默认字体颜色为白色
private int mTextSize = sp2px(getContext(), 22);
private int mInsideColor = Color.parseColor("#9FB6FF");//内部图形颜色,为蓝色
private boolean isLight = false; //控制是否开启动画
private int[] colors = {Color.parseColor("#9FB6FF"), Color.parseColor("#A7BAFE"), Color.parseColor("#F26882"), Color.parseColor("#F8DF57")};//变动颜色
private int mOutsideColor;
private Paint mTextPaint;
private Paint mInsideViewPaint;
private Paint mOutsideRectPaint;
private float mOutsideRectHeight;
private Paint mOutsideCirclePaint;
private int mRealWidth;
private int mRealHeight;
private LinearGradient mLinearGradient;
private RadialGradient mRadialGradient;
private String mBreatheViewText;
private ValueAnimator mGoLightAnim;
private ValueAnimator mBackLightAnim;
private ValueAnimator mColorAnim;
private int mColor;
private int mEndGraidentColor = Color.parseColor("#2e2e3D");
public BreatheView(Context context) {
this(context, null);
}
public BreatheView(Context context, @Nullable AttributeSet attrs) {
this(context, attrs, 0);
}
public BreatheView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context