package com.zzx.factorytest.view; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.RectF; import android.util.AttributeSet; import android.util.Log; import android.util.TypedValue; import android.view.View; import java.util.Arrays; public class LightView extends View { public static final String TAG = "LightView.cla"; private Paint mPaintBackground; private RectF mRectFBackground; private float[] mLines; private int mIntervalNumber = 10; private int mLineNumer = mIntervalNumber + 1; private int mPaddingLeft; private int mPaddingTop; private int mPaddingRight; private int mPaddingBottom; public static int defaultPadding = 16; public int mX_Value = 100; private Paint mX_ValuePaint; public LightView(Context context) { this(context, null); } public LightView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public LightView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); Log.d(TAG, " onCreate "); init(); } private void init() { mPaintBackground = new Paint(); mPaintBackground.setStyle(Paint.Style.STROKE); mPaintBackground.setAntiAlias(true); mPaintBackground.setColor(Color.WHITE); mX_ValuePaint = new Paint(mPaintBackground); mX_ValuePaint.setTextAlign(Paint.Align.CENTER); mRectFBackground = new RectF(); mLines = new float[mLineNumer << 2]; defaultPadding = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, defaultPadding, getResources().getDisplayMetrics()); } @Override protected void onAttachedToWindow() { Log.d(TAG, " onAttachedToWindow ->"); super.onAttachedToWindow(); Log.d(TAG, " onAttachedToWindow <-"); } @Override protected void onDetachedFromWindow() { Log.d(TAG, " onDetachedFromWindow ->"); super.onDetachedFromWindow(); Log.d(TAG, " onDetachedFromWindow <-"); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { Log.d(TAG, " onMeasure ->"); super.onMeasure(widthMeasureSpec, heightMeasureSpec); Log.d(TAG, " onMeasure <-"); int width = MeasureSpec.getSize(widthMeasureSpec); int height = MeasureSpec.getSize(heightMeasureSpec); if (width > 0 && height > 0) { mPaddingLeft = getPaddingLeft() > 0 ? getPaddingLeft() : defaultPadding; mPaddingTop = getPaddingTop() > 0 ? getPaddingTop() : defaultPadding; mPaddingRight = getPaddingRight() > 0 ? getPaddingRight() : defaultPadding; mPaddingBottom = getPaddingBottom() > 0 ? getPaddingBottom() : defaultPadding; mRectFBackground.set(mPaddingLeft, mPaddingTop, width - mPaddingRight, height - mPaddingBottom); int interval = measureInterval(mRectFBackground.bottom - mRectFBackground.top, mIntervalNumber); for (int i = 0; i < mLineNumer; i++) { int index = i << 2; mLines[index] = mRectFBackground.left; if (i == mIntervalNumber) { mLines[index + 1] = mLines[index + 3] = mRectFBackground.bottom; } else { mLines[index + 1] = mLines[index + 3] = interval * i + mRectFBackground.top; } mLines[index + 2] = mRectFBackground.right; } Log.d(TAG, Arrays.toString(mLines)); } } private int measureInterval(float height, int number) { return Math.round(height / number); } @Override protected void onDraw(Canvas canvas) { Log.d(TAG, " onDraw ->"); super.onDraw(canvas); Log.d(TAG, " onDraw <-"); drawBackground(canvas); drawX_Value(canvas); } private void drawX_Value(Canvas canvas) { int interval = mX_Value / 10; for (int i = 0; i < mLineNumer; i++) { } } private void drawBackground(Canvas canvas) { canvas.drawColor(Color.GRAY); // canvas.drawRect(mRectFBackground, mPaintBackground); canvas.drawLines(mLines, mPaintBackground); } }