我的一个应用程序在 android 4.4 上发生了一些奇怪的事情。我正在使用自定义 View ,在其中使用 Typeface.createFromAsset
设置自定义字体。如上图所示,渲染在设备/模拟器上运行良好。当我将自定义 View 的内容保存为位图时出现问题:
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 上我只能看到字体边框,文本内部是透明的。我该如何解决这个问题?
在 API 19 及更高版本中的 Canvas 上绘制文本时,您必须注意所使用的 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
}
我是一名优秀的程序员,十分优秀!