3

我的一个应用程序在 android 4.4 上发生了一些奇怪的事情。我正在使用自定义视图,在其中设置自定义字体Typeface.createFromAsset。如上图所示,渲染在设备/模拟器上运行良好。当我将自定义视图的内容保存为位图时出现问题:

Bitmap currentBitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(currentBitmap);
view.draw(canvas);

在 android < 4.4 上一切正常。保存的图像看起来与屏幕上可见的图像相同。但是,在 4.4 上,我只看到字体边框,文本内部是透明的。我怎样才能解决这个问题 ?

在此处输入图像描述

4

1 回答 1

5

在 API 19 及更高版本中的画布上绘制文本时,您必须注意您正在使用的 Paint 对象的笔触和填充。在之前的 Android 版本中,即使使用笔触样式,文本也总是被绘制成填充的。在 KitKat 中,将样式设置为 stroke 就可以做到这一点;描边而不是填充文本。您将需要在渲染文本时手动设置要填充的绘制样式,然后将其重新设置为描边以绘制其他内容(如果您正在尝试这样做)。

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    mTextPaint.setStyle(Style.STROKE);
    // do other setup on Paint object
    // Draw non-text stuff

    mTextPaint.setStyle(Style.FILL);
    // do other setup on Paint object
    // Draw all the text stuff
}
于 2013-11-18T18:09:09.680 回答