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);
}
}
CircleView的更多相关文章
- Android自定义View之CircleView
Android自定义View之CircleView 版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请表明出处:http://www.cnblogs.com/cavalier-/p/5999 ...
- swift版的CircleView
swift版的CircleView 效果图 源码 // // CircleView.swift // CircleView // // Created by YouXianMing on 15/10/ ...
- [控件] CircleView
CircleView 效果图: 源码: // // CircleView.h // YXMWeather // // Created by XianMingYou on 15/2/17. // Cop ...
- 通过圆形载入View了解自定义View
这是自定义View的第一篇文章,通过制作简单的自定义View来了解自定义View的流程. 自定义View是Android学习和开发中必不可少的一部分.通过自定义View我们可以制作丰富绚丽的控件,自定 ...
- Android多种进度条使用详解
在这里,总结一下loading进度条的使用简单总结一下. 一.说起进度条,必须说说条形进度条,经常都会使用到嘛,特别是下载文件进度等等,还有像腾讯QQ安装进度条一样,有个进度总给人良好的用户体验. 先 ...
- 仿网易新闻 ViewPager 实现图片自动轮播
新闻 App 首页最上方一般会循环播放热点图片,如下图所示. 本文主要介绍了利用 ViewPager 实现轮播图片,图片下方加上小圆点指示器标记当前位置,并利用 Timer+Handler 实现了自动 ...
- 核心动画(CAKeyframeAnimation)
Main.storyboard ViewController.m // // ViewController.m // 8A02.核心动画 - CAKeyframeAnimation // // ...
- Android 自定义View 三板斧之三——重写View来实现全新控件
通常情况下,Android实现自定义控件无非三种方式. Ⅰ.继承现有控件,对其控件的功能进行拓展. Ⅱ.将现有控件进行组合,实现功能更加强大控件. Ⅲ.重写View实现全新的控件 本文来讨论最难的一种 ...
- Swift - 简单封装一个工具类模板
创建模板类(封装一个类) 例1:新建一个名字叫做 Product 的类 Product.swift File 的内容 class Product { var name: String var desc ...
随机推荐
- electron入门
Electron是由Github开发,用HTML,CSS和JavaScript来构建跨平台桌面应用程序的一个开源库. Electron通过将Chromium和Node.js合并到同一个运行时环境中,并 ...
- Android圆角矩形
1.在drawable中创建shape_round文件 <?xml version="1.0" encoding="utf-8"?> <sha ...
- 嫁给程序员的好处,你get到了吗?
首先,我们要知道,什么是程序员?程序员是做什么的? "程序员(英文Programmer)是从事程序开发.维护的专业人员.一般将程序员分为程序设计人员和程序编码人员,但两者的界限并不非常清楚, ...
- zookeeper windows伪集群搭建
1.下载zookeeper http://mirror.bit.edu.cn/apache/zookeeper/ 解压后,目录重命名为zookeeper1,进入 conf目录,把zoo_sample. ...
- Linux 文件删除 提示 Operation not permitted
Linux 删除 隐藏文件提示 Operation not permitted ? linux 删除 隐藏文件 提示 Operation not permitted 不允许操作? 使用 ls ...
- 在PHP中使用CURL,“撩”服务器只需几行
在PHP中使用CURL,“撩”服务器只需几行https://segmentfault.com/a/1190000006220620 七夕啦,作为开发,妹子没得撩就“撩”下服务器吧,妹子有得撩的同学那就 ...
- Kafka如何保证消息不丢失不重复
首先需要思考下边几个问题: 消息丢失是什么造成的,从生产端和消费端两个角度来考虑 消息重复是什么造成的,从生产端和消费端两个角度来考虑 如何保证消息有序 如果保证消息不重不漏,损失的是什么 大概总结下 ...
- Java基础_0305:简单Java类
简单Java类 简单Java类是一种在实际开发之中使用最多的类的定义形式,在简单Java类中包含有类.对象.构造方法.private封装等核心概念的使用,而对于简单Java类首先给出如下的基本开发要求 ...
- struts2简单入门
框架是什么,框架有什么作用 框架 实现部分功能的代码. 作用 控制请求和响应. 相对于WEB项目的执行流程 struts2项目搭建流程 配置web.xml 配置前端控制器[核心控制器] ---一个fi ...
- Java类锁和对象锁
一.类锁和对象锁 二.使用注意 三.参考资料 一.类锁和对象锁 类锁:在代码中的方法上加了static和synchronized的锁,或者synchronized(xxx.class) 对象锁:在代码 ...