源代码及可执行文件下载地址: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. ext.net gridlist选择内部元素时自动选择所在行

    function changeSelection(id) { var index = 0; for (var i = 0; i < mcp_liststore.data.length; i++) ...

  2. tcp_listen函数

    #include <netdb.h> #include <unistd.h> #include <stddef.h> #include <strings.h& ...

  3. 20155324 《Java程序设计》实验一 Java开发环境的熟悉(Windws + IDEA)实验报告

    20155324 <Java程序设计>实验一 Java开发环境的熟悉(Windws + IDEA)实验报告 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用IDEA 编辑. ...

  4. SqlServer 左右内连接

  5. 嵌入式开发-迅为4418开发板Android4.4.4实现ble功能

    ①.如果是迅为4418开发板:在4418/android/device/nexell/drone2/device.mk中添加: frameworks/native/data/etc/android.h ...

  6. scrapy和scrapy_redis入门

    Scarp框架 需求 获取网页的url 下载网页内容(Downloader下载器) 定位元素位置, 获取特定的信息(Spiders 蜘蛛) 存储信息(ItemPipeline, 一条一条从管里走) 队 ...

  7. Linux下运行jmeter

    • 我们在做测试的时候,有时候要运行很久,公司用的测试服务器一般都是linux,就可以运行在linux下面,linux下面不能像windows一样有图形化界面,那怎么运行脚本呢,就先在windows上 ...

  8. python的基础初始第二天

    1.基础数据类型初始 1,数字类型,int,用于计算,+ ,- ,*, /,加,减,乘,除.在python2有整型和长整型之分(3344L),在python3 已经不区分了. 2,字符串类型strin ...

  9. Python 15 html 基础 - CSS &javascript &DOM

    本节内容 CSS基础 javascript基础 DOM 前言,这边这块楼主已经很熟悉了,CSS天天用到,简单的一些javascript也是所以就挑点重点说了.然后就是dom不怎么用,但是其实也用不到, ...

  10. Python 8 - Socket编程进阶

    本节内容:    1.Socket语法及相关    2.SocketServer实现多并发 Socket语法及相关 socket 概念 socket本质上就是在2台网络互通的电脑之间架设一个通道,两台 ...