package com.xiaok.homepage.widget;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
public class CustomCheckBox extends View {
private boolean isChecked = false;
private Paint circlePaint;
private Paint checkPaint;
private Path checkPath;
private int size = 50;
public CustomCheckBox(Context context) {
super(context);
init();
}
public CustomCheckBox(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public CustomCheckBox(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
circlePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
circlePaint.setColor(Color.parseColor("#5A8DDF"));
checkPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
checkPaint.setColor(Color.WHITE);
checkPaint.setStyle(Paint.Style.STROKE);
checkPaint.setStrokeWidth(6);
checkPath = new Path();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int cx = getWidth() / 2;
int cy = getHeight() / 2;
int radius = Math.min(cx, cy);
canvas.drawCircle(cx, cy, radius, circlePaint);
if (isChecked) {
checkPath.reset();
float startX = cx - radius / 3f;
float startY = cy;
float midX = cx - radius / 8f;
float midY = cy + radius / 3f;
float endX = cx + radius / 2f;
float endY = cy - radius / 3f;
checkPath.moveTo(startX, startY);
checkPath.lineTo(midX, midY);
checkPath.lineTo(endX, endY);
canvas.drawPath(checkPath, checkPaint);
}
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int width = resolveSize(size, widthMeasureSpec);
int height = resolveSize(size, heightMeasureSpec);
setMeasuredDimension(width, height);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
isChecked = !isChecked;
invalidate();
return true;
}
return super.onTouchEvent(event);
}
public boolean isChecked() {
return isChecked;
}
public void setChecked(boolean checked) {
if (isChecked != checked) {
isChecked = checked;
invalidate();
}
}
}