转载自:http://blog.csdn.net/li6185377/article/details/7255809

由于Opengl 本身是没有DrawString 这种函数的 所以我们要实现最简单的办法         字写在图片上  在把图片转为Texture 进行绘图

下面是我封装好的类

[java]  view plain copy
  1. package ljh.opengl.command;
  2. import java.util.ArrayList;
  3. import java.util.HashMap;
  4. import java.util.Vector;
  5. import ljh.opengl.GLEx;
  6. import ljh.opengl.LColor;
  7. import ljh.opengl.LTexture;
  8. import android.graphics.Bitmap;
  9. import android.graphics.Canvas;
  10. import android.graphics.Bitmap.Config;
  11. import android.graphics.Paint;
  12. public class GLFont {
  13. //要打印的字  字体大小  字的信息   最大宽度
  14. public static Bitmap getImage(String str, int fontsize, Paint paint,
  15. int maxWidth) {
  16. String[] text = StringFormat(str, maxWidth, fontsize);
  17. int[] count = getLinesMaxLength(text);
  18. Bitmap bitmap = Bitmap.createBitmap(count[0] * (fontsize / 2)
  19. + count[1] * fontsize +5, (text.length) * fontsize,
  20. Config.ARGB_8888);
  21. Canvas canvas = new Canvas(bitmap);
  22. paint.setTextSize(fontsize);
  23. for (int i = 0; i < text.length; i++) {
  24. canvas.drawText(text[i], 0, (i+1) * fontsize -3, paint);
  25. }
  26. return bitmap;
  27. }
  28. //具体的方法  还好我们前面实现了DrawTexture 我们这边就不用多写一次了
  29. public static void drawString(GLEx gl, String str, float x, float y,Paint paint,int maxWidth) {
  30. if(str==null||str.trim()=="")
  31. return;
  32. String key = str.trim().toLowerCase();
  33. LTexture texture = data.get(key);
  34. if(texture==null)
  35. {
  36. Bitmap bitmap = getImage(str, (int)paint.getTextSize(), paint, maxWidth);
  37. texture = new LTexture(bitmap);
  38. data.put(key, texture);
  39. }
  40. gl.drawTexture(texture, x, y);
  41. }
  42. //保存着写过的字的纹理 当渲染到一定次数 还没使用的将被销毁
  43. public static HashMap<String, LTexture> data = new HashMap<String, LTexture>();
  44. //保存要销毁的纹理
  45. private static ArrayList<String> UnusedList = new ArrayList<String>();
  46. //渲染线程没运行一次 次函数运行一次
  47. public static void update()
  48. {
  49. for(String key:data.keySet())
  50. {
  51. LTexture texture = data.get(key);
  52. if(texture.isUnused())
  53. {
  54. UnusedList.add(key);
  55. }
  56. else
  57. {
  58. texture.addUnused();
  59. }
  60. }
  61. for(String key:UnusedList)
  62. {
  63. GLEx.glex.delete(data.remove(key));
  64. }
  65. UnusedList.clear();
  66. }
  67. /**
  68. * 返回字数最多的那个行中中英文的数量
  69. *
  70. * @param lines
  71. * @return int[0] 英文的数量 int[1] 中文的数量
  72. */
  73. public static int[] getLinesMaxLength(String[] lines) {
  74. int max = 0, index = 0;
  75. for (int i = 0; i < lines.length; i++) {
  76. if (max < lines[i].getBytes().length) {
  77. max = lines[i].getBytes().length;
  78. index = i;
  79. }
  80. }
  81. int[] count = new int[2];
  82. for (int i = 0; i < lines[index].length(); i++) {
  83. if (lines[index].charAt(i) > 255) {
  84. count[1]++;
  85. } else {
  86. count[0]++;
  87. }
  88. }
  89. return count;
  90. }
  91. //对String 进行分段
  92. public static String[] StringFormat(String text, int maxWidth, int fontSize) {
  93. String[] result = null;
  94. Vector<String> tempR = new Vector<String>();
  95. int lines = 0;
  96. int len = text.length();
  97. int index0 = 0;
  98. int index1 = 0;
  99. boolean wrap;
  100. while (true) {
  101. int widthes = 0;
  102. wrap = false;
  103. for (index0 = index1; index1 < len; index1++) {
  104. if (text.charAt(index1) == '\n') {
  105. index1++;
  106. wrap = true;
  107. break;
  108. }
  109. widthes = fontSize + widthes;
  110. if (widthes > maxWidth) {
  111. break;
  112. }
  113. }
  114. lines++;
  115. if (wrap) {
  116. tempR.addElement(text.substring(index0, index1 - 1));
  117. } else {
  118. tempR.addElement(text.substring(index0, index1));
  119. }
  120. if (index1 >= len) {
  121. break;
  122. }
  123. }
  124. result = new String[lines];
  125. tempR.copyInto(result);
  126. return result;
  127. }
  128. }

Android Opengl es 写字 笔记相关推荐

  1. OpenGl文章 Android OpenGL ES 简明开发教程

    Android OpenGL ES 简明开发教程 分类:android学习笔记2011-12-14 15:04375人阅读评论(0)收藏举报 ApiDemos 的Graphics示例中含有OpenGL ...

  2. Android OpenGL ES 从入门到精通系统性学习教程

    1 为什么要写这个教程 目前这个 OpenGL ES 极简教程的更新暂时告一段落,在此之前,很荣幸获得了阮一峰老师的推荐. 因为在工作中频繁使用 OpenGL ES 做一些特效.滤镜之类的效果,加上平 ...

  3. Android OpenGl Es 学习(二):定义顶点和着色器

    概述 这是一个新的系列,学习OpengGl Es,其实是<OpenGl Es 应用开发实践指南 Android卷>的学习笔记,感兴趣的可以直接看这本书,当然这个会记录自己的理解,以下只作为 ...

  4. android自定义美颜相机完整程序,Android OpenGL ES从入门到进阶(一)—— 五分钟开发一款美颜相机...

    源码链接:https://github.com/smzhldr/AGLFramework 一.前言 商店里有数十款的美颜相机类产品,其实现原理基本上都是以OpenGL ES为核心的特效处理,大神可以忽 ...

  5. Android OpenGL ES 开发教程(20):颜色Color

    OpenGL ES 支持的颜色格式为RGBA模式(红,绿,蓝,透明度).颜色的定义通常使用Hex格式0xFF00FF 或十进制格式(255,0,255), 在OpenGL 中却是使用0-1之间的浮点数 ...

  6. Android OpenGL ES 开发教程(16):Viewing和Modeling(MODELVIEW) 变换

    Viewing和Modeling 变换关系紧密,对应到相机拍照为放置三角架和调整被拍物体位置及角度,通常将这两个变换使用一个modelview 变换矩阵来定义.对于同一个坐标变换,可以使用不同的方法来 ...

  7. Android OpenGL ES(六)创建实例应用OpenGLDemos程序框架 .

    有了前面关于Android OpenGL ES的介绍,可以开始创建示例程序OpenGLDemos. 使用Eclipse 创建一个Android项目 Project Name: OpenGLDemos ...

  8. Android OpenGL ES视频渲染(一)GLSurfaceView

    相关文章:Android OpenGL ES视频渲染(二)EGL+OpenGL Android中视频渲染有几种方式,之前的文章使用的是nativewindow(包括softwareRender).今天 ...

  9. Android OpenGL ES 学习(十一) –渲染YUV视频以及视频抖音特效

    OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学 ...

最新文章

  1. 经常使用的npm命令
  2. swim 中一行代码解决收回键盘
  3. Java中Connection方法笔记
  4. Eclipse内存分析工具的用法
  5. CodeForces - 1368F Lamps on a Circle(交互+贪心)
  6. 周末,说声php的settergetter(魔术)方法,你们辛苦了
  7. 带您探究云存储的奥秘,三分钟帮您快速了解OSS
  8. 澄海哪里学机器人编程_少年学机器人编程
  9. 使用python脚本定时备份web网站
  10. 【Elasticsearch】将 term查询的 integer 字段改成 keyword之后, must 再改成 filter,就造成query_cache剧降
  11. 互联网软件开发和传统软件开发的不同(转型互联网开发需要适应的那些事)
  12. 易捷web文件服务器软件,易捷在线文件管理系统
  13. 摩拜免押金是在阿里的哈罗猛烈攻击下的应对举措
  14. Codeforces Round #643 (Div. 2)——B. Young Explorers
  15. Spring Data JPA 查询方法的命名语法与参数
  16. 懒出天际--语音鼠标,解放双手,靠嘴使唤鼠标。SAPI语音识别,WINAPI鼠标消息
  17. Python社区医疗服务平台的设计与实现毕业设计源码221707
  18. Mysql查询历史SQL执行记录
  19. EDA软件常用技巧-SCL配置
  20. [IC笔试题] FIFO深度计算

热门文章

  1. 口令安全是什么意思?等保2.0政策中口令安全标准条款有哪些?
  2. 创新声卡的设置和调试
  3. ue4超级跳、do once、技能冷却时间
  4. 直播源码:游戏录屏直播的基本实现方式
  5. 三子棋游戏(超级详解,附加电脑下棋优化)
  6. NO.7 Monitor(管程)是什么意思?Java中Monitor(管程)的介绍
  7. Atom 下载、安装
  8. 电脑把计算机用户删了怎么办,电脑密码忘了怎么办最简单的方法
  9. InternetCrackUrl
  10. VMware 12 Pro 软件包下载 安装教程——超详细