/** * Difficult the first time, easy the second. * * @author xulin * @description: * @date :2019/10/12 */ public class LxTimeLineView extends AppCompatImageView { private int itemCount;//Item总数量 private int itemPosition;//Item位置 private Paint paint; private int paintColor = 0xff08a1ef; private float width; private float height; private float centerX; private float centerY; private int startY; private int moveXY; public int getItemCount() { return itemCount; } public void setItemCount(int itemCount) { this.itemCount = itemCount; invalidate(); } public int getItemPosition() { return itemPosition; } public void setItemPosition(int itemPosition) { this.itemPosition = itemPosition; invalidate(); } public LxTimeLineView(Context context) { this(context, null); } public LxTimeLineView(Context context, @Nullable AttributeSet attrs) { this(context, attrs, 0); } public LxTimeLineView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); paint = new Paint(); paint.setAntiAlias(true); //线宽 paint.setStrokeWidth(DimenUtils.dp2px(getContext(), 2)); } @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); width = getMeasuredWidth(); height = getMeasuredHeight(); centerY = getMeasuredHeight() / 2; centerX = getMeasuredWidth() / 2; } @Override protected void onDraw(Canvas canvas) { paint.setColor(paintColor); startY = DimenUtils.dp2px(getContext(), getPaddingTop()); moveXY = DimenUtils.dp2px(getContext(), 6); //开始位置 if (itemPosition == 0) { canvas.drawLine(centerX, startY, centerX, centerY + (height - centerY), paint); canvas.drawCircle(centerX, startY, DimenUtils.dp2px(getContext(), 10), paint); paint.setColor(Color.WHITE); //绘制对号图形 canvas.drawLine(centerX / 2, startY, centerX, startY + moveXY, paint); canvas.drawLine(centerX, startY + moveXY, centerX + moveXY, centerY / 2, paint); //结束位置 } else if (itemPosition == (itemCount - 1)) { canvas.drawLine(centerX, 0, centerX, centerY, paint); canvas.drawCircle(centerX, startY, DimenUtils.dp2px(getContext(), 10), paint); paint.setColor(Color.WHITE); canvas.drawCircle(centerX, startY, DimenUtils.dp2px(getContext(), 8), paint); //中间部分 } else { canvas.drawLine(centerX, 0, centerX, height, paint); canvas.drawCircle(centerX, startY, DimenUtils.dp2px(getContext(), 10), paint); paint.setColor(Color.WHITE); canvas.drawCircle(centerX, startY, DimenUtils.dp2px(getContext(), 8), paint); } super.onDraw(canvas); } }