Android笔记 自定义控件时drawText字符串宽度的3种计算方式

    我们经常在做自定义控件的时候,有些控件是需要图文一起显示的,显示文字就肯定要用到drawText 方法,而drawText(str, x, y, paint)有两个参数x 和 y是绘制的坐标,我们必须确定这个坐标之后,才能知道从哪里绘制,有时候我们绘制完一个字符串,而想在这个字符串的后面重新进行一些绘制的时候,就需要重新获取绘制坐标,这个时候首先想到的就是得到前一个字符串的绘制宽度 + 前一个字符串的绘制坐标就可以推算我们现在绘制的坐标了。

String str = "hello";
canvas.drawText(str, x, y, mPaint);

//1. 粗略计算文字宽度:
float width = mPaint.measureText(str);

//2. 计算文字的矩形,可以得到宽高:
Rect rect = new Rect();
mPaint.getTextBounds(str, 0, str.length(), rect);
int w = rect.width();
int h = rect.height();

//3. 精确计算文字的宽度:
public static int  getTextWidth(Paint mPaint, String str)
{
    float iSum = 0;
    if(str != null && !str.equals(""))
     {
           int len = str.length();
           float  widths[] = new float[len];
           paint.getTextWidths(str, widths);
           for(int i = 0; i < len; i++)
           {
                iSum += Math.ceil(widths[i])
           }
     }
     return (int)iSum;
}
时间: 2024-10-14 12:48:02

Android笔记 自定义控件时drawText字符串宽度的3种计算方式的相关文章

字符串数组的两种定义方式

C++实现字符串数组的两种方式 1.常用的方法 #include <iostream> #include <string> using namespace std; int main() { string str[]={"hello", "string", "world"}; int str_size=sizeof(str)/sizeof(string); cout<<"size of str is

(002)spring容器中bean初始化、销毁时执行的方法及其3种实现方式

spring容器中bean初始化或者销毁时会执行一些方法,有3种实现方式. 1.实现InitializingBean.DisposableBean接口,在bean的属性设置后和bean销毁时分别执行afterPropertiesSet和destroy方法 pom.xml文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/

Android获取TextView显示的字符串宽度

工作上有业务需要判断textview是否换行,我的做法是判断textview要显示的字符串的宽度是否超过我设定的宽度,若超过则会执行换行. 项目中的其他地方也有这样的需求,故直接使用了那一块的代码.如下 public float getTextWidth(Context Context, String text, int textSize){ TextPaint paint = new TextPaint(); float scaledDensity = Context.getResource(

android笔记:获取View组件宽度以及ViewTreeObserver

View宽高测量方法: 测量方法有三种,如下: 1)(直接在onCreate()执行) int w = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED); int h = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED); imageView.measure(w, h); int height =imageView.getMeasured

Json对象与Json字符串互转(4种转换方式)

一.jQuery插件支持的转换方式 1 $.paseJSON(jsonstr);//将json字符串转换为json对象 二.浏览器支持的转换方式(Firefox,Chrome,Opera,Safair,IE9,IE8) 1 JSON.parse(jaonstr);//将json字符串转换为json对象 2 JSON.stringify(jsonobj);//将json对象转换为json字符串 注意:由于ie8(兼容模式),ie7和ie6没有JSON对象,需要使用JSON官方的方式,引入json.

【Android 并发编程】线程间通信的三种基本方式

1. 使用管道流Pipes "管道"是java.io包的一部分.它是Java的特性,而不是Android特有的.一条"管道"为两个线程建立一个单向的通道.生产者负责写数据,消费者负责读取数据. 下面是一个使用管道流进行通信的例子. public class PipeExampleActivity extends Activity { private static final String TAG = "PipeExampleActivity";

php笔记04:get/post请求有两种主要方式

get/post的区别有哪些? 1. 安全性get请求的数据会显示在地址栏上,post请求的数据,放在http协议的消息体中 2. 从可以提交的数据大小来看: http协议本身并没有限制数据大小 浏览器在对get和post请求做显示,get请求数据为2K+35,post没有显示 3. get请求可以更好的添加到收藏夹 来自为知笔记(Wiz)

Json对象与Json字符串互转(4种转换方式)(转)

1>jQuery插件支持的转换方式: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符串转换成json对象 2>浏览器支持的转换方式(Firefox,chrome,opera,safari,ie9,ie8)等浏览器: JSON.parse(jsonstr); //可以将json字符串转换成json对象 JSON.stringify(jsonobj); //可以将json对象转换成json对符串  注:ie8(兼容模式),

【学习笔记】——原生js中常用的四种循环方式

一.引言 本文主要是利用一个例子,讲一下原生js中常用的四种循环方式的使用与区别: 实现效果: 在网页中弹出框输入0   网页输出"欢迎下次光临" 在网页中弹出框输入1   网页输出"查询中--" 在网页中弹出框输入2   网页输出"取款中--" 在网页中弹出框输入3   网页输出"转账进行中--" 在网页中弹出框输入其他字符   网页输出"无效按键" 四种循环: for循环 while循环 for  in