自定义的控件写了很多跟圆形有关系的,有时候蛮纠结在圆里面画文字的

有两种思路,一种是画圆之后再画字体,将字体控制在居中的位置

另外一种是:重写TextView,控制TextView的gravity居中,再绘制TextView的边框,重点介绍这种用法。

一、绘制之前,掌握RectF对象的用法

RectF 这个类包含一个矩形的四个单精度浮点坐标。矩形通过上下左右4个边的坐标来表示一个矩形。这些坐标值属性可以被直接访问,用width()和 height()方法可以获取矩形的宽和高。注意:大多数方法不会检查这些坐标分类是否错误(也就是left<=right和top<=bottom)。当长和宽相等的时候就绘制成了正方形,也就是right和bottom相等的时候。

RectF一共有四个构造方法:

RectF()构造一个无参的矩形

RectF(float left,float top,float right,float bottom)构造一个指定了4个参数的矩形

RectF(RectF r)根据指定的RectF对象来构造一个RectF对象(对象的左边坐标不变)

RectF(Rect r)根据给定的Rect对象来构造一个RectF对象

RectF提供了很多方法,下面介绍几个方法:

Public Boolean contain(RectF r);判断一个矩形是否在此矩形内,如果在这个矩形内或者和这个矩形等价则返回true,同样类似的方法还有public Boolean contain(float left,float top,float right,float bottom)和public Boolean contain(float x,float y)。

Public void union(float x,float y)更新这个矩形,使它包含矩形自己和(x,y)这个点。

RectF类提供的方法都比较简单,容易理解,再此就不再一一赘述

Android.graphics.Rect类,这个类同android.graphics.RectF很相似,不同的地方是Rect类的坐标是用整形表示的,而RectF的坐标是用单精度浮点型表示的。这里大家一定要注意啊。

二、自定义文字圆形边框

1、重写TextView类

public class TextCircleView extends TextView {

private Paint mPaint;

public TextCircleView(Context context) {

super(context);

// TODO Auto-generated constructor stub

}

//xml创建TextCircleView调用这个构造函数

public TextCircleView(Context context, AttributeSet attrs) {

super(context, attrs);

// TODO Auto-generated constructor stub

init();

}

//new TextCircleView调用这个构造函数

public TextCircleView(Context context, AttributeSet attrs, int defStyle) {

super(context, attrs, defStyle);

init();

}

/** * 初始化画笔 */

public void init()

{

mPaint = new Paint();

}

/** * 调用onDraw绘制边框 */

@Override

protected void onDraw(Canvas canvas) {

// TODO Auto-generated method stub

super.onDraw(canvas);

//创建一个RectF,用来限定绘制圆弧的范围

RectF rectf = new RectF();

//设置画笔的颜色

mPaint.setColor(getPaint().getColor());

//设置画笔的样式,空心

mPaint.setStyle(Paint.Style.STROKE);

//设置抗锯齿

mPaint.setAntiAlias(true);

//设置画得一个半径,然后比较长和宽,以最大的值来确定长方形的长宽,确定半径

int r = getMeasuredWidth() > getMeasuredHeight() ? getMeasuredWidth() : getMeasuredHeight();

//如果设置的padding不一样绘制出来的是椭圆形。绘制的时候考虑padding

//Log.i("边界", "宽度"+getMeasuredWidth()+"高度"+getMeasuredHeight()+"getPaddingLeft()"+getPaddingLeft()+"getPaddingTop"+getPaddingTop()+"getPaddingRight(): "+getPaddingRight()+"getPaddingBottom()"+getPaddingBottom());

//当padding都为0的时候,绘制出来的就是RectF限定的区域就是一个正方形

rectf.set(getPaddingLeft(),getPaddingTop(),r-getPaddingRight(),r-getPaddingBottom());

//绘制圆弧

canvas.drawArc(rectf,0,360,false,mPaint);

}

}

2、使用自定义的控件,以xml的形式(activity_circletextview.xml)

三、图片效果

android自定义控件绘制位置,Android自定义控件之——文字圆形边框(将文字绘制在圆中间)...相关推荐

  1. android 设置字体位置,android中textview控件中的文字的位置是如何调整的

    有2种方法可以设置TextView文字居中: 一:在xml文件设置:android:gravity="center" 二:在程序中设置:m_TxtTitle.setGravity( ...

  2. android 线性布局位置,android – 如何在线性布局中更改视图的位置.

    所以我有一个已经填充了子项的线性布局.有没有办法改变其中一个孩子的位置? 如果有任何帮助的话,我正试图交换他们之间的观点. final LinearLayout parrent = (LinearLa ...

  3. android自动获取位置,Android中获取当前位置信息

    这篇教程主要介绍了在Android平台上如何使用服务完成定位功能.众所周知,Android设备的当前位置信息,对开发创新性App.解决人们日常生活问题有极大帮助.在Android平台开发定位相关的应用 ...

  4. android sdk文件位置,Android SDK文件夹位于何处?

    我通过Air for Android用Adobe Flash创建了一个.apk应用程序.现在,我想通过这款Blackberry在线打包机为黑莓App World做好准备:https://bdsc.we ...

  5. android addview指定位置,Android开发中,请问当在一个视图中addView另一个布局视图时为什么报错?...

    Android开发中,我在一个视图中addView另一个布局视图(该视图通过inflate加载获得,其中root为null即没有附加parent视图),为什么还是会报错误: The specified ...

  6. Android Menu item位置,Android MenuItem自定义布局

    当我点击操作栏中的操作按钮时,我会显示一个 PopupMenu. 我想在我的PopupMenu中的MenuItem,使用这样的自定义布局: 布局/ menu_item_layout.xml andro ...

  7. android 刷新view位置,Android View刷新机制实例分析

    本文实例讲述了Android View刷新机制.分享给大家供大家参考,具体如下: 一.总体说明 在Android的布局体系中,父View负责刷新.布局显示子View:而当子View需要刷新时,则是通知 ...

  8. android视频播放指定位置,android – 如何在某个特定位置的视图中查看视频?

    我目前正在试图实施一个视频视图,以便在特定的位置显示一个视频.我可以显示一个全屏视频没有问题.然而,无论何时我尝试在框架(例如一个小矩形)中显示视频,我只能在该视图中显示一部分视频.我无法将视频放入该 ...

  9. android 导航栏位置,android手机导航栏

    /** * 设置透明状态栏与导航栏 * @param navi true不设置导航栏|false设置导航栏 */ public void setStatusBar(boolean navi) { // ...

最新文章

  1. 找ipcore的地方
  2. stm32 USART_IT_IDLE中断 一帧数据
  3. 蓝桥杯练习系统习题-历年真题解析1(完整版)
  4. Excel 如何根据单元格中的值设立不同的颜色(或渐变)?(222)
  5. sleuth微服务整合Zipkin
  6. 如何在生产环境使用Btrace进行调试
  7. 鸿蒙科技与文化,数字阅读 | “华为鸿蒙”:当现代科技遇到古典文化
  8. cdn是什么和作用有些
  9. 032. asp.netWeb用户控件之一初识用户控件并为其自定义属性
  10. 初中计算机第一课怎么讲,初中信息技术第一课 图像及其简单处理教学设计
  11. vlan为什么能隔离广播域_【思唯网络学院】VLAN是二层技术还是三层技术?
  12. 相亲交友小程序,案例:情深深之恋
  13. Visio(流程图绘制软件)的免费替代品
  14. javafx canvas_教程:JavaFX的Canvas API概览
  15. 为linux下ibus添加五笔98输入法过程详解
  16. Linux学习第一节课学习心得
  17. 实现电脑同时上内网和外网(或通过外网访问到该电脑通过该电脑访问内网)
  18. C#简单实现office转pdf、pdf转图片
  19. word中插入常用几种公式编辑器
  20. python B站UP主所有视频封面下载

热门文章

  1. 利用rank函数实现自动排序
  2. 精确分割和筛选音频从长的音频中
  3. centos7.2安装mysql 1
  4. LeetCode-数组-删除有序数组重复元素
  5. 关于http://127.0.0.1:4723/wd/hub的解释
  6. 专访闪送联合创始人于红建:要继续深耕国内市场
  7. Lync Server 2013 标准版部署(二)DNS记录权限
  8. 互联网时代,发展物联网是一场机遇与挑战并存的改革
  9. 软件需求阅读笔记之三
  10. linux下的主要目录