我有这段代码
void drawText2(Canvas c)
{
DisplayMetrics metrics = new DisplayMetrics();
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
display.getMetrics(metrics);
int screenwidth = metrics.widthPixels;
int screenheight = metrics.heightPixels;
Paint paint = new Paint();
paint.setStyle(Paint.Style.FILL);
paint.setColor(Color.BLACK);
paint.setTextSize(150);
paint.setAntiAlias(true);
paint.setTypeface(Typeface.DEFAULT_BOLD);
Bitmap.createBitmap(100, 100, Bitmap.Config.RGB_565);
float x = screenwidth/2;
float y = screenheight/2;
c.drawText("32", x, y, paint);
}
哪个工作正常,但如果我添加以下行
Typeface GC=Typeface.createFromAsset(getAssets(),"fonts/ADarling.ttf");
以及更改行
paint.setTypeface(Typeface.DEFAULT_BOLD);
到
paint.setTypeface(Typeface.create(GC, 0));
它将使用字体,一切似乎都工作正常,但随机壁纸将变黑,并保持这种方式几分钟然后它会再次出现,并将继续这样做。我使用的代码错了吗?
答案 0 :(得分:1)
尝试仅将字体初始化一次(不要每次drawText2()
调用时加载<)
private Typeface myFont;
public myConstructor() {
/* ... */
Typeface GC = Typeface.createFromAsset(getAssets(),"fonts/ADarling.ttf");
myFont = Typeface.create(GC, Typeface.NORMAL);
/* ... */
}
void drawText2(Canvas c)
/* ... */
paint.setTypeface(myFont);
/* ... */
}
此外,不需要以下行:
Bitmap.createBitmap(100, 100, Bitmap.Config.RGB_565);
答案 1 :(得分:0)
黑暗中的狂刺:)
您应该检查用于设置字体的代码是否在 与字体的初始化代码相同的线程。
这个领域有一些已知的问题,特别是如果你正在设置东西 在java中然后使用NDK来调整字体。这是因为Java和NDK在稍微不同的线程中运行,并且使用了线程安全的内存分配系统。
只是一个想法,可能不适合你。
贝