源代码及可执行文件下载地址: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. js工具库

    js-md5:https://www.npmjs.com/package/js-md5

  2. IP白名单

    一.什么是IP白名单 公众平台后台新增了IP白名单功能.通过开发者ID及密码调用获取access_token接口时,需要设置访问来源IP为白名单. IP白名单是指一组IP列表,只有该列表中的IP地址的 ...

  3. [译]C#7 Pattern Matching

    原文 public struct Square { public double Side { get; } public Square(double side) { Side = side; } } ...

  4. Docker 容器CPU设置

    CPU使用率其实就是你运行的程序占用的CPU资源,表示你的机器在某个时间点的运行程序的情况.使用率越高,说明你的机器在这个时间上运行了很多程序,反之较少.CPU使用率的高低与你的CPU强弱有直接关系. ...

  5. this与回调函数

    在c++里回调函数分2种: 全局函数:不包函在类的内部 或 类内部的静态函数 类内部函数(或叫 局部函数):需要通过实例化后的对象调用的 因c++是c的一层封装,所以类似c里struct内的函数 在传 ...

  6. Kaldi的nnet2 Component

    FixedAffineComponent:类 LDA-like 的非相关转换,由标准的 weight matrix plus bias 组成(即Wx+b),通过标准的 stochastic gradi ...

  7. nodejs设置允许跨域

    //设置服务器跨域权限app.use(function (req, res, next) {    res.header("Access-Control-Allow-Origin" ...

  8. bae64编码

    data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAYAAABIdFAMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJb ...

  9. tidb调研

    TiDB是新一代开源分布式 NewSQL 数据库,相比较于我们常见的数据库MySQL,TiDB具有水平伸缩.强一致性的分布式事务.基于 Raft 算法的多副本复制等特性.同时,TiDB兼容MySQL生 ...

  10. MGR架构~高可用架构细节的梳理

    一 简介:今天咱们来聊聊mgr的细节原理相关 二 选择新主机制   1 当主节点宕掉,自动会根据服务器的server_uuid变量和group_replication_member_weight变量值 ...