加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_开封站长网 (http://www.0378zz.com/)- 科技、AI行业应用、媒体智能、低代码、办公协同!
当前位置: 首页 > 教程 > 正文

借助Android游戏引擎Angle开发界面——显示汉字

发布时间:2021-11-21 18:13:53 所属栏目:教程 来源:互联网
导读:Angle不支持汉字的显示,内带的AngleFont,对E文的支持是没问题。AngleFont通过把字符变为Bitmap的方式来加载字库,准备纹理。对于汉字字库,这个过程会耗时很长,全部加载进来,占用内存也很多;如果部分加载、根据使用频度更新字库缓存,算法又太麻烦。 我
 Angle不支持汉字的显示,内带的AngleFont,对E文的支持是没问题。AngleFont通过把字符变为Bitmap的方式来加载字库,准备纹理。对于汉字字库,这个过程会耗时很长,全部加载进来,占用内存也很多;如果部分加载、根据使用频度更新字库缓存,算法又太麻烦。
 
我使用的是笨方法,先使用Android的Canvas,把汉字绘制到内存图片,然后根据图片生成一个AngleSprite(含配套的AngleSpriteLayout及AngleSpriteLayout关联的Texture)。下面是转换汉字为Bitmap的类,支持单行文本绘制,可以根据需要做省略处理。
 
public final class StringToBitmap {
 
 public static Bitmap getBitmapFromSingleLineString(String text, int textColor, int backgroundColor, String fontType,
   int fontSize, int bitmapWidth, int bitmapHeight, Paint.Align align) {
  Bitmap bitmap = Bitmap.createBitmap(bitmapWidth, bitmapHeight,
    Bitmap.Config.ARGB_8888);
  Canvas canvas = new Canvas(bitmap);
  // 背景颜色
  canvas.drawColor(backgroundColor);
  TextPaint paint = new TextPaint();
 
  Typeface typeface = Typeface.create(fontType, Typeface.NORMAL);
  // 消除锯齿
  paint.setAntiAlias(true);
  // 字体为红色
  paint.setColor(textColor);
  paint.setTypeface(typeface);
  paint.setTextSize(fontSize);
  paint.setTextAlign(align);
 
  CharSequence truncateText = TextUtils.ellipsize(text, paint
    , bitmapWidth, TextUtils.TruncateAt.END);
  // 绘制字体
  canvas.drawText(truncateText, 0, truncateText.length(), 0, bitmapHeight - 1,  paint);
  return bitmap;
 }
}
 
仅仅是上面的处理还不够,生成了一个Bitmap,还需要转变成纹理。
 
Angle类库中的AngleTextureEngine只能从Resouce中加载纹理。第一步,我修改了AngleTextureEngine类,添加了下面的方法以便从已有的Bitmap生成纹理对象。
 
 public AngleTexture createTextureFromBitmap(Bitmap bitmap)
 {
  AngleTexture tex = null;
  Iterator<AngleTexture> it = mTexturesX.iterator();
  while (it.hasNext())
  {
   tex = it.next();
   if (tex instanceof AngleBitmapTexture)
   {
    // Texture already exists
    if (((AngleBitmapTexture) tex).mBitmap == bitmap)
    {
     tex.mRefernces++;
     return tex;
    }
   }
  }
 
  tex = new AngleBitmapTexture(this, bitmap);
  mTexturesX.add(tex);
  return tex;
 }

(编辑:开发网_开封站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读