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

  

CircleView的更多相关文章

  1. Android自定义View之CircleView

    Android自定义View之CircleView 版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请表明出处:http://www.cnblogs.com/cavalier-/p/5999 ...

  2. swift版的CircleView

    swift版的CircleView 效果图 源码 // // CircleView.swift // CircleView // // Created by YouXianMing on 15/10/ ...

  3. [控件] CircleView

    CircleView 效果图: 源码: // // CircleView.h // YXMWeather // // Created by XianMingYou on 15/2/17. // Cop ...

  4. 通过圆形载入View了解自定义View

    这是自定义View的第一篇文章,通过制作简单的自定义View来了解自定义View的流程. 自定义View是Android学习和开发中必不可少的一部分.通过自定义View我们可以制作丰富绚丽的控件,自定 ...

  5. Android多种进度条使用详解

    在这里,总结一下loading进度条的使用简单总结一下. 一.说起进度条,必须说说条形进度条,经常都会使用到嘛,特别是下载文件进度等等,还有像腾讯QQ安装进度条一样,有个进度总给人良好的用户体验. 先 ...

  6. 仿网易新闻 ViewPager 实现图片自动轮播

    新闻 App 首页最上方一般会循环播放热点图片,如下图所示. 本文主要介绍了利用 ViewPager 实现轮播图片,图片下方加上小圆点指示器标记当前位置,并利用 Timer+Handler 实现了自动 ...

  7. 核心动画(CAKeyframeAnimation)

    Main.storyboard ViewController.m // //  ViewController.m //  8A02.核心动画 - CAKeyframeAnimation // //  ...

  8. Android 自定义View 三板斧之三——重写View来实现全新控件

    通常情况下,Android实现自定义控件无非三种方式. Ⅰ.继承现有控件,对其控件的功能进行拓展. Ⅱ.将现有控件进行组合,实现功能更加强大控件. Ⅲ.重写View实现全新的控件 本文来讨论最难的一种 ...

  9. Swift - 简单封装一个工具类模板

    创建模板类(封装一个类) 例1:新建一个名字叫做 Product 的类 Product.swift File 的内容 class Product { var name: String var desc ...

随机推荐

  1. ios 不支持-,-时间。

    var date = "2000-08-29";  console.log(new Date(date).getTime());解决办法 date .replace(/-/g, ' ...

  2. thc_业务积累

    查询医生SQL: select aa.id staffid,bb.property_value staffname from thc_warehouse.staff_record aa inner j ...

  3. Webpack2学习记录-1

    1.安装前准备 安装 webpack 之前,需要安装 node,这时最新的是 6,npm 是 4.如果有老的 node 项目在跑建议安装下 nvm. 2.建议安装在局部,即在项目下的 node_mod ...

  4. IPv6地址测试宏

  5. JS创建对象之稳妥构造函数模式

    所谓稳妥对象,指的是没有公共属性,而且其方法也不引用this的对象 function Person(name, age, job) { // 创建要返回的对象 var o = new Object() ...

  6. 使用Verilog HDL语言注意事项

    1.wire和reg区别,输入输出是wire型,表示硬件线的连接,要在always模块里被赋值需要中间reg型变量,两者通过: assign 输入/输出=reg型中间变量 2.case的default ...

  7. Andrew NG 机器学习编程作业2 Octave

    问题描述:用逻辑回归根据学生的考试成绩来判断该学生是否可以入学 这里的训练数据(training instance)是学生的两次考试成绩,以及TA是否能够入学的决定(y=0表示成绩不合格,不予录取:y ...

  8. computed,methods,watch

    加载顺序: 在官方文档中,强调了computed区别于method最重要的两点 computed是属性调用,而methods是函数调用 computed带有缓存功能,而methods不是 计算属性是基 ...

  9. #6284. 数列分块入门 8(区间询问等于一个数 cc 的元素,并将这个区间的所有元素改为 c)

    题目链接:https://loj.ac/problem/6284 题目大意:中文题目 具体思路:还是和sqrt那个题的思路相同的,标记每一块的值是不是相同的,注意lazy下标的下放. AC代码: #i ...

  10. 《SSH网上商城》-视频目录--代码可以跑起来

    本课程是2015年2月份的,就是14年底的. 课程第一天的代码-添加 jsp-api.jar   servlet-api.jar就可以跑起来,环境 JDK1.7 和tomcat8, SSH网上商城\S ...