android自定义控件绘制位置,Android自定义控件之——文字圆形边框(将文字绘制在圆中间)...
自定义的控件写了很多跟圆形有关系的,有时候蛮纠结在圆里面画文字的
有两种思路,一种是画圆之后再画字体,将字体控制在居中的位置
另外一种是:重写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自定义控件之——文字圆形边框(将文字绘制在圆中间)...相关推荐
- android 设置字体位置,android中textview控件中的文字的位置是如何调整的
有2种方法可以设置TextView文字居中: 一:在xml文件设置:android:gravity="center" 二:在程序中设置:m_TxtTitle.setGravity( ...
- android 线性布局位置,android – 如何在线性布局中更改视图的位置.
所以我有一个已经填充了子项的线性布局.有没有办法改变其中一个孩子的位置? 如果有任何帮助的话,我正试图交换他们之间的观点. final LinearLayout parrent = (LinearLa ...
- android自动获取位置,Android中获取当前位置信息
这篇教程主要介绍了在Android平台上如何使用服务完成定位功能.众所周知,Android设备的当前位置信息,对开发创新性App.解决人们日常生活问题有极大帮助.在Android平台开发定位相关的应用 ...
- android sdk文件位置,Android SDK文件夹位于何处?
我通过Air for Android用Adobe Flash创建了一个.apk应用程序.现在,我想通过这款Blackberry在线打包机为黑莓App World做好准备:https://bdsc.we ...
- android addview指定位置,Android开发中,请问当在一个视图中addView另一个布局视图时为什么报错?...
Android开发中,我在一个视图中addView另一个布局视图(该视图通过inflate加载获得,其中root为null即没有附加parent视图),为什么还是会报错误: The specified ...
- Android Menu item位置,Android MenuItem自定义布局
当我点击操作栏中的操作按钮时,我会显示一个 PopupMenu. 我想在我的PopupMenu中的MenuItem,使用这样的自定义布局: 布局/ menu_item_layout.xml andro ...
- android 刷新view位置,Android View刷新机制实例分析
本文实例讲述了Android View刷新机制.分享给大家供大家参考,具体如下: 一.总体说明 在Android的布局体系中,父View负责刷新.布局显示子View:而当子View需要刷新时,则是通知 ...
- android视频播放指定位置,android – 如何在某个特定位置的视图中查看视频?
我目前正在试图实施一个视频视图,以便在特定的位置显示一个视频.我可以显示一个全屏视频没有问题.然而,无论何时我尝试在框架(例如一个小矩形)中显示视频,我只能在该视图中显示一部分视频.我无法将视频放入该 ...
- android 导航栏位置,android手机导航栏
/** * 设置透明状态栏与导航栏 * @param navi true不设置导航栏|false设置导航栏 */ public void setStatusBar(boolean navi) { // ...
最新文章
- 找ipcore的地方
- stm32 USART_IT_IDLE中断 一帧数据
- 蓝桥杯练习系统习题-历年真题解析1(完整版)
- Excel 如何根据单元格中的值设立不同的颜色(或渐变)?(222)
- sleuth微服务整合Zipkin
- 如何在生产环境使用Btrace进行调试
- 鸿蒙科技与文化,数字阅读 | “华为鸿蒙”:当现代科技遇到古典文化
- cdn是什么和作用有些
- 032. asp.netWeb用户控件之一初识用户控件并为其自定义属性
- 初中计算机第一课怎么讲,初中信息技术第一课 图像及其简单处理教学设计
- vlan为什么能隔离广播域_【思唯网络学院】VLAN是二层技术还是三层技术?
- 相亲交友小程序,案例:情深深之恋
- Visio(流程图绘制软件)的免费替代品
- javafx canvas_教程:JavaFX的Canvas API概览
- 为linux下ibus添加五笔98输入法过程详解
- Linux学习第一节课学习心得
- 实现电脑同时上内网和外网(或通过外网访问到该电脑通过该电脑访问内网)
- C#简单实现office转pdf、pdf转图片
- word中插入常用几种公式编辑器
- python B站UP主所有视频封面下载