1、attrs文件
<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="CustomCircle"> <attr name="textColor" format="color" /> <attr name="text" format="string" /> <attr name="canvasColor" format="color" /> <attr name="circleOneColor" format="color" /> <attr name="circleTwoColor" format="color" /> <attr name="textSize" format="dimension" /> <attr name="radiusWidth" format="integer" /> <attr name="tworadiusWidth" format="integer" /> </declare-styleable> </resources>
2、代码
public class CustomCircle extends View { private int textColor; private int canvasColor; private int circleOneColor; private int circleTwoColor; private String text; private float textSize; private int radius; private int tworadius; private int measuredWidth; private int measuredHeight; private float pointX; private float pointY; public CustomCircle(Context context) { super(context); } public CustomCircle(Context context, AttributeSet attrs) { super(context, attrs); gatAttrs(context, attrs); } public CustomCircle(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); gatAttrs(context,attrs); } private void gatAttrs(Context context, AttributeSet attrs) { TypedArray typedArray=context.obtainStyledAttributes(attrs, R.styleable.CustomCircle); textColor = typedArray.getColor(R.styleable.CustomCircle_textColor, Color.GREEN); circleOneColor=typedArray.getColor(R.styleable.CustomCircle_circleOneColor,Color.RED); circleTwoColor=typedArray.getColor(R.styleable.CustomCircle_circleTwoColor,Color.RED); canvasColor=typedArray.getColor(R.styleable.CustomCircle_canvasColor,Color.RED); textSize = typedArray.getDimension(R.styleable.CustomCircle_textSize, 15); text=typedArray.getString(R.styleable.CustomCircle_text); radius = typedArray.getInt(R.styleable.CustomCircle_radiusWidth, -1); tworadius = typedArray.getInt(R.styleable.CustomCircle_tworadiusWidth, -1); typedArray.recycle(); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); setMeasuredDimension(radius*2,radius*2); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); Paint paint=new Paint(); measuredWidth = getMeasuredWidth()/2; measuredHeight = getMeasuredHeight()/2; canvas.drawColor(canvasColor); paint.setAntiAlias(true); paint.setColor(circleOneColor); paint.setStyle(Paint.Style.FILL); canvas.drawCircle(measuredWidth,measuredHeight,radius,paint); paint.setColor(circleTwoColor); paint.setStyle(Paint.Style.FILL); canvas.drawCircle(measuredWidth,measuredHeight, tworadius, paint); paint.setColor(textColor); paint.setTextSize(textSize); paint.setTypeface(Typeface.DEFAULT_BOLD); //设置字体 //左下角横纵坐标 canvas.drawText(text,measuredWidth - text.length() / 2*textSize, measuredHeight + textSize/2, paint); } private OnViewClickListener onViewClickListener; public interface OnViewClickListener{ void OnClick(String text); } public void setOnViewClickListener(OnViewClickListener onViewClickListener){ this.onViewClickListener=onViewClickListener; } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()){ case MotionEvent.ACTION_DOWN: pointX = event.getX(); pointY = event.getY(); double range = Math.sqrt((measuredWidth - pointX) * (measuredWidth - pointX) + (measuredHeight - pointY) * (measuredHeight - pointY)); String text=""; if (range<tworadius){ text="在小圆内"; }else if (range>tworadius&&range<radius){ text="在圆环内"; }else if (range>radius){ text="在圆环外"; } if (onViewClickListener!=null){ onViewClickListener.OnClick(text); } break; } return true; } }3、Activity
public class MainActivity extends AppCompatActivity { private CustomCircle mRoundProgressBa2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); CustomCircle cv= (CustomCircle) findViewById(R.id.roundProgressBar2); cv.setOnViewClickListener(new CustomCircle.OnViewClickListener() { @Override public void OnClick(String text) { Toast.makeText(MainActivity.this, text, Toast.LENGTH_SHORT).show(); if (text.equals("在圆环内")){ Intent intent=new Intent(MainActivity.this,TwoActivity.class); startActivity(intent); } } }); } }