package com.stardust.widget; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.AttributeSet; import android.util.Log; import android.view.View; import com.stardust.scriptdroid.R; /** * Created by Stardust on 2017/3/10. */ public class LevelBeamView extends View { private static final String TAG = "LevelBeamView"; private static final int[] colors = { 0xff1abc9c, 0xff3498db, 0xffe67e22, 0xff8e44ad, 0xfff1c40f, 0xff2ecc71, }; private int mLevel; private int mPaddingLeft, mPaddingRight; private int mLinesWidth; private int mLinesOffset; private Paint mLinePaint; public LevelBeamView(Context context) { super(context); init(); } public LevelBeamView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public LevelBeamView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } public void setLevel(int level) { mLevel = level; requestLayout(); } private void init() { setWillNotDraw(false); mPaddingLeft = (int) getResources().getDimension(R.dimen.level_beam_view_padding_left); mPaddingRight = (int) getResources().getDimension(R.dimen.level_beam_view_padding_right); mLinesWidth = (int) getResources().getDimension(R.dimen.level_beam_view_line_width); mLinesOffset = (int) getResources().getDimension(R.dimen.level_beam_view_line_offset); mLinePaint = new Paint(); mLinePaint.setAntiAlias(true); mLinePaint.setColor(Color.RED); mLinePaint.setStyle(Paint.Style.FILL); mLinePaint.setStrokeWidth(mLinesWidth); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int width = mPaddingLeft + mPaddingRight + (mLevel + 1) * (mLinesWidth + mLinesOffset); int height = View.MeasureSpec.getSize(heightMeasureSpec); setMeasuredDimension(width, height); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); for (int lvl = 0; lvl <= mLevel; lvl++) { float LINE_X = mPaddingLeft + lvl * mLinesWidth; if (lvl >= 1) { LINE_X += lvl * mLinesOffset; } mLinePaint.setColor(getColorForLevel(lvl)); canvas.drawLine(LINE_X, 0, LINE_X, canvas.getHeight(), mLinePaint); } } private int getColorForLevel(int level) { return colors[level % colors.length]; } }