设置动态壁纸的字体类型会导致屏幕变黑

时间:2011-09-23 11:39:40

标签: java android live-wallpaper

我有这段代码

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));

它将使用字体,一切似乎都工作正常,但随机壁纸将变黑,并保持这种方式几分钟然后它会再次出现,并将继续这样做。我使用的代码错了吗?

2 个答案:

答案 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在稍微不同的线程中运行,并且使用了线程安全的内存分配系统。

只是一个想法,可能不适合你。