默认圆形,切换为 方形 ,三角 ......
public class ShapeSwitchView extends View { public enum ShapeType{ circle,square,triangle } public ShapeSwitchView(Context context) { this(context,null); } public ShapeSwitchView(Context context, @Nullable AttributeSet attrs) { this(context, attrs,0); } public ShapeSwitchView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); mPaint = new Paint(); mPaint.setAntiAlias(true); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); int width = MeasureSpec.getSize(widthMeasureSpec); int height = MeasureSpec.getSize(heightMeasureSpec); /*8 去除最小值 */ setMeasuredDimension(Math.min(width,height),Math.min(width,height)); } private Paint mPaint ; private ShapeType shapeType=ShapeType.circle ; private Path mPath ; @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); switch (shapeType){ case circle: mPaint.setColor(Color.RED); canvas.drawCircle(getWidth()/2,getWidth()/2,getWidth()/2,mPaint); break; case square: mPaint.setColor(Color.GREEN); canvas.drawRect(0,0,getWidth(),getHeight(),mPaint); break; case triangle: mPaint.setColor(Color.GRAY); if(mPath==null){ mPath = new Path(); mPath.moveTo(getWidth()/2,0); mPath.lineTo(0, (float) Math.sqrt(Math.pow(getWidth(),2)-Math.pow(getWidth()/2,2))); mPath.lineTo(getWidth(), (float) Math.sqrt(Math.pow(getWidth(),2)-Math.pow(getWidth()/2,2))); mPath.close(); } canvas.drawPath(mPath,mPaint); break; } } public void changeView(){ switch (shapeType){ case circle: shapeType = ShapeType.square; break; case square: shapeType = ShapeType.triangle; break; case triangle: shapeType = ShapeType.circle; break; } invalidate(); } }