zoukankan      html  css  js  c++  java
  • CircleView

    源代码及可执行文件下载地址:http://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);  
    	 }
    }
    

      

  • 相关阅读:
    Linux性能优化实战学习笔记:第十九讲
    Linux性能优化实战学习笔记:第二讲
    Docker:企业级私有仓库harbor[十六]
    Docker:跨主机容器间通信之overlay [十五]
    Docker:macvlan实现容器跨主机通信 [十四]
    Docker:容器的四种网络类型 [十三]
    Docker:单机编排工具docker-compose [十二]
    Docker:私有仓库registry [十一]
    Docker:容器间互联的应用zabbix监控项目 [十]
    Docker:dockerfile镜像的分层 [九]
  • 原文地址:https://www.cnblogs.com/rainboy2010/p/4604649.html
Copyright © 2011-2022 走看看