CircleView

源代码及可执行文件下载地址:https://files.cnblogs.com/rainboy2010/CircleViewDemo.zip

自定义View控件实现圆形的背景+居中的文字,主要代码如下:

public class CircleView extends View 
{
	
     private static final int DEFAULT_DRAW_COLOR = Color.BLACK;
     private static final int DEFAULT_TEXT_COLOR=Color.WHITE;
     private static final int DEFAULT_TEXT_SIZE=30;
     private static final String DEFAULT_TEXT="";
     private int mDrawColor=DEFAULT_DRAW_COLOR;
     private int mTextColor=DEFAULT_TEXT_COLOR;
     private int mTextSize=DEFAULT_TEXT_SIZE;
     private String mText=DEFAULT_TEXT;
   
    
     private final RectF mDrawableRect = new RectF();
     private final Paint mDrawPaint = new Paint();
     private final Paint mTextPaint = new Paint();

    
	 public CircleView(Context context) 
	 {
		super(context);
		init();
	 }
	
	 public CircleView(android.content.Context context, android.util.AttributeSet attrs)
	 {
		this(context,attrs,0);
	 }
	 public CircleView(android.content.Context context, android.util.AttributeSet attrs, int defStyleAttr)
	 {
		 super(context,attrs,defStyleAttr);
		 
		 TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CircleView,defStyleAttr,0);
		 
		 mDrawColor=a.getColor(R.styleable.CircleView_draw_color, DEFAULT_DRAW_COLOR);
		 mTextColor=a.getColor(R.styleable.CircleView_text_color, DEFAULT_TEXT_COLOR);
		 mTextSize=a.getDimensionPixelSize(R.styleable.CircleView_text_size, DEFAULT_TEXT_SIZE);
		 mText=a.getString(R.styleable.CircleView_text);
		
		 
		 a.recycle();
		 
		 init();
	 }
	 private void init() 
	 {
		 mDrawPaint.setStyle(Paint.Style.FILL);  
		 mDrawPaint.setColor(mDrawColor);
		 mTextPaint.setColor(mTextColor);  	
		 mTextPaint.setTextSize(mTextSize);
		 mTextPaint.setTextAlign(Align.CENTER);
	 }
	 
	 public void setDrawColor(int drawColor)
	 {
		 if(drawColor==mDrawColor)
		 {
			 return;
		 }
		 mDrawColor = drawColor;
		 mDrawPaint.setColor(mDrawColor);
	     invalidate();
	 }
	 public int getDrawColor()
	 {
		 return mDrawColor;
	 }
	 
	 public void setTextColor(int textColor)
	 {
		 if(textColor==mTextColor)
		 {
			 return;
		 }
		 mTextColor = textColor;
		 mTextPaint.setColor(mTextColor); 
	     invalidate();
	 }
	 public int getTextColor()
	 {
		 return mTextColor;
		
	 }
	 
	 public void setTextSize(int textSize)
	 {
		 if(textSize==mTextSize)
		 {
			 return;
		 }
		 mTextSize = textSize;
		 mTextPaint.setTextSize(mTextSize);
	     invalidate();
	 }
	 public int getTextSize()
	 {
		 return mTextSize;
	 }
	 
	 public void setText(String text)
	 {
		 if(text.equals(mText))
		 {
			 return;
		 }
		 mText = text;
	     invalidate();
	 }
	 public String getText()
	 {
		 return mText;
	 }
	 
	 
	 @Override
	 protected void onDraw(Canvas canvas) 
	 {
		 mDrawableRect.set(0, 0, getWidth(), getHeight());
		 canvas.drawCircle(mDrawableRect.centerX(),mDrawableRect.centerY(),mDrawableRect.width()/2, mDrawPaint);
		 
	     if(!mText.equals(""))
	     {
	    	 FontMetrics fontMetrics =mTextPaint.getFontMetrics();
	    	 float fontHeight = fontMetrics.bottom - fontMetrics.top;//获取字体高度
	 	     float textBaseY = mDrawableRect.height()/2+fontHeight/2 - fontMetrics.bottom;//获取BaseLine
	         canvas.drawText(mText, mDrawableRect.centerX(), textBaseY, mTextPaint);//水平垂直居中
	     }
	     super.onDraw(canvas);  
	 }
}

  

 

posted @ 2015-06-27 20:46  南极冰川雪  阅读(378)  评论(0编辑  收藏  举报