Android:

1、在CCImage中添加下面的方法:

//头文件声明略。

cocos2d::CCSize CCImage::getStringSize(const char *text, const char * pFontName, int nSize)

{

JniMethodInfo minfo;

if (! JniHelper::getStaticMethodInfo(minfo, "org/cocos2dx/lib/Cocos2dxBitmap", "getFontSize",

"(Ljava/lang/String;Ljava/lang/String;I)[I"))

{

CCLOG("getStringSize %s %d: error to get methodInfo", __FILE__, __LINE__);

return CCSizeMake(nSize, nSize);

}

jstring jmsg1 = minfo.env->NewStringUTF(text);

jstring jmsg2 = minfo.env->NewStringUTF(pFontName);

jint  size=nSize;

jintArray array=(jintArray)minfo.env->CallStaticObjectMethod(minfo.classID,minfo.methodID,jmsg1,jmsg2,size);

jsize len=minfo.env->GetArrayLength(array);

jint* body = minfo.env->GetIntArrayElements(array, 0);

if (body==NULL) {

CCLOG("body %s %d: error to get methodInfo", __FILE__, __LINE__);

return CCSizeMake(nSize, nSize);

}

int width=body[0];

int height=body[1];

  //以下的清理工作必不可少 否则会报 ReferenceTable overflow (max=512)

minfo.env->ReleaseIntArrayElements(array, body, 0);

minfo.env->DeleteLocalRef(jmsg1);

minfo.env->DeleteLocalRef(jmsg2);

minfo.env->DeleteLocalRef(array);

minfo.env->DeleteLocalRef(minfo.classID);

return CCSizeMake(width, height);

}

2、在Cocos2dxBitmap类中添加下面的内容:

static String tempFontName="";

static int tempFontSize=0;

private static Paint tmpPaint;

public static int[] getFontSize(String text, final String pFontName, final int pFontSize){

if(tmpPaint==null||tempFontSize!=pFontSize||!tempFontName.equals(pFontName)){

Log.i("cocos2d-x-android", "pFontName =="+pFontName+" pFontSize =="+pFontSize);

tmpPaint= Cocos2dxBitmap.newPaint(pFontName, pFontSize, HORIZONTALALIGN_LEFT);

tempFontName=pFontName;

tempFontSize=pFontSize;

}

int width=(int)tmpPaint.measureText(text);

final FontMetricsInt fm = tmpPaint.getFontMetricsInt();

int height = (int) Math.ceil(fm.bottom - fm.top)+2;

return new int[]{width,height};

}

ios:

CCSize CCImage::getStringSize(const char *text, const char * pFontName, int nSize)

{

NSString * str = [NSString stringWithUTF8String:text];

NSString * fntName      = [NSString stringWithUTF8String:pFontName];

CGSize dim, constrainSize;

id font = [UIFont fontWithName:fntName size:nSize];

if (font)

{

dim = _calculateStringSize(str, font, &constrainSize);

}

else

{

if (!font)

{

font = [UIFont systemFontOfSize:nSize];

}

if (font)

{

dim = _calculateStringSize(str, font, &constrainSize);

}

}

return CCSizeMake(dim.width, dim.height);

}

cocos2dx获得字体的宽高的更多相关文章

  1. js实现字体和容器宽高随窗口改变

    用于字体大小和容器的宽高字体和宽高设为rem就可以了 var html = document.documentElement; function fonts(){ var hW = html.offs ...

  2. 007. 自定义ListBox的item的宽高, 字体居中

    /// <summary> /// 自定义ListBox的item的宽高, 字体居中 /// </summary> /// <param name="sende ...

  3. PHP-根据字符串和所用字体计算字符串所占宽高

    今天由于用GD画图, 需要把一段文字在一个框内居中, 但是文字的宽度如果用strlen($str) * $font_size来计算的话, 由于文字不是等宽高的, 所以会导致偏离, 最后选用的GD库的i ...

  4. 根据字符长度动态确定UIlabel宽高

    iOS7中用以下方法 - (CGSize)sizeWithAttributes:(NSDictionary *)attrs; 替代过时的iOS6中的- (CGSize)sizeWithFont:(UI ...

  5. input与select 设置相同宽高,在浏览器上却显示不一致,不整齐

    遇到 input与select 设置相同宽高,在浏览器上却显示不一致,遂实验了下(IE 10.013 ,Firefox 30.0),得出以下结论 input   width,height 值里面, 不 ...

  6. iOS_根据文字字数动态确定Label宽高

    iOS7中用以下方法 CGSize 替代过时的iOS6中的- (CGSize)sizeWithFont:(UIFont *)font 方法 // iOS7_API_根据文字 字数动态确定Label宽高 ...

  7. 【Android 应用开发】 自定义组件 宽高适配方法, 手势监听器操作组件, 回调接口维护策略, 绘制方法分析 -- 基于 WheelView 组件分析自定义组件

    博客地址 : http://blog.csdn.net/shulianghan/article/details/41520569 代码下载 : -- GitHub : https://github.c ...

  8. CSS宽高背景介绍

    本萌新还未毕业,在一家外包公司干了一个月,因烦恼日常琐事任务,深感外包之坑,以及上班路途艰辛,特转战erp实施,继写日常随笔,望来日屌丝逆袭,走上人生巅峰. 若有错误,请前辈指点迷津,在下谢过. &l ...

  9. iOS根据文字字数动态确定Label宽高

    我们有时候在写项目的时候,会碰到,意见反馈,还有其他地方,讲座活动细则等需要大篇展示的文本, 因为每次服务器返回的内容大小不一,所以需要动态的调整label的宽高: 在ios 6 的时候可以: -(v ...

随机推荐

  1. Springboot 上传CSV文件并将数据存入数据库

    .xml文件依赖配置 <!--csv依赖 --> <dependency> <groupId>org.apache.commons</groupId> ...

  2. [Abp vNext 入坑分享] - 7.Automapper与validation的使用

    简要说明 [项目源码] [章节目录] 本文主要介绍Automapper与Validation的使用方法.首先使用Automapper的目的是引入组件完成entity与dto之间的转换以达到简化代码的目 ...

  3. Redis安装启动(linux系统)

    Redis简介 redis是以kv存储的nosql非关系型数据库 sql支持事务性,nosql不支持 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间 ...

  4. 欧姆龙FinsTCP与FinsUDP协议解析 —— 利用Wireshark对报文逐字节进行解析详细解析附含报文模拟器等

    前言 – Fins欧姆龙这个协议网上极少有相关的模拟器.Tcp的这一块倒是有但是Udp的基本都是不可用 1. Fins协议结构也很简单 协议分为两种 一种tcp一种udp 2. Tcp比Udp的报文会 ...

  5. 10个典型的JavaScript面试题

    问题1:作用域 考虑如下代码:   JavaScript   1 2 3 4 5 6 7 (function() {   var a = b = 5;   })();   console.log(b) ...

  6. C# 数据操作系列 - 15 SqlSugar 增删改查详解

    0. 前言 继上一篇,以及上上篇,我们对SqlSugar有了一个大概的认识,但是这并不完美,因为那些都是理论知识,无法描述我们工程开发中实际情况.而这一篇,将带领小伙伴们一起试着写一个能在工程中使用的 ...

  7. 面试官:你说你精通 Docker,那你来详细说说 Dockerfile 吧

    接上一篇:30分钟快速上手Docker,看这篇就对了! 一. 带着问题学Dockerfile 1.疑问 我们都知道从远程仓库可以pull一个tomcat等镜像下来,然后docker run启动容器,然 ...

  8. Java中异常分类和Throw和Throws的区别

    Java中异常分类和Throw和Throws的区别 1.异常分类 Throwable是Java中所有错误和异常的超类.它的下一级是Error和Exception 1.1 Error(错误) Error ...

  9. afert和b的伪类画三角形

    /* 提示信息 */ .content-tishi{ width: 6.93rem; margin: 0 auto; background: #e9eaea; display: flex; flex- ...

  10. 在 Linux 系统中如何管理 systemd 服务

    在上一篇文章<Linux的运行等级与目标>中,我介绍过 Linux 用 systemd 来取代 init 作为系统的初始化进程.尽管这一改变引来了很多争议,但大多数发行版,包括 RedHa ...