Kuf*_*ffs 8 android android-canvas android-5.0-lollipop
canvas.DrawTextOnPath似乎不适用于Lollipop设备.看到这里的差异.(Nexus 10图像正确但Lollipop显示不正确)

代码是一个简单的路径绘制.
// Path for the inner circle
unitPath = new Path();
unitPath.addArc(unitRect, 180.0f, 180.0f);
// Draw the text and the path
canvas.drawTextOnPath("Inner Circle", unitPath, 0.0f, 0.0f, unitPaint);
canvas.drawPath(unitPath,unitPaint);
Run Code Online (Sandbox Code Playgroud)
对于想要查看此问题的人,可以在此处看到说明此问题的Android Studio测试项目. https://dl.dropboxusercontent.com/u/6768304/WebLinks/TestApp.rar
我需要在这台设备上做些什么"不同"吗?
好的,看来 DrawTextOnPath 现在有点破损,字体大小低于 1.0f
解决方案是将所有内容放大,绘制文本,然后将其缩小。
演示项目中的drawTitle方法将从此改变:
private void drawTitle(Canvas canvas) {
canvas.drawTextOnPath(upperTitle, upperTitlePath, 0.0f, 0.02f, unitPaint);
canvas.drawTextOnPath(lowerTitle, lowerTitlePath, 0.0f, 0.0f, unitPaint);
canvas.drawTextOnPath(unitTitle, unitPath, 0.0f, 0.0f, unitPaint);
canvas.drawPath(unitPath,unitPaint);
}
Run Code Online (Sandbox Code Playgroud)
对此:
private void drawTitle(Canvas canvas) {
//Save original font size
float originalTextSize = unitPaint.getTextSize();
// set a magnification factor
final float magnifier = 100f;
// Scale the canvas
canvas.save();
canvas.scale(1f / magnifier, 1f / magnifier);
// create new rects and paths based on the new scale
unitRect = new RectF();
unitRect.set((faceRect.left + unitPosition) * magnifier, (faceRect.top + unitPosition) * magnifier, (faceRect.right - unitPosition) * magnifier, (faceRect.bottom - unitPosition) * magnifier);
unitPath = new Path();
unitPath.addArc(unitRect, 180.0f, 180.0f);
titleRect = new RectF();
titleRect.set((faceRect.left + titlePosition) * magnifier, (faceRect.top + titlePosition) * magnifier, (faceRect.right - titlePosition) * magnifier, (faceRect.bottom - titlePosition) * magnifier);
upperTitlePath = new Path();
upperTitlePath.addArc(titleRect, 180.0f, 180.0f);
titleRect = new RectF();
titleRect.set((faceRect.left + titlePosition) * magnifier, (faceRect.top + titlePosition) * magnifier, (faceRect.right - titlePosition) * magnifier, (faceRect.bottom - titlePosition) * magnifier);
lowerTitlePath = new Path();
lowerTitlePath.addArc(titleRect, -180.0f, -180.0f);
// increase the font size
unitPaint.setTextSize(originalTextSize * magnifier);
// do the drawing of the text
canvas.drawTextOnPath(unitTitle, unitPath, 0.0f, 0.0f, unitPaint);
canvas.drawTextOnPath(upperTitle, upperTitlePath, 0.0f, 0.02f, unitPaint);
canvas.drawTextOnPath(lowerTitle, lowerTitlePath, 0.0f, 0.0f, unitPaint);
// bring everything back to normal
canvas.restore();
unitPaint.setTextSize(originalTextSize);
canvas.drawPath(unitPath, unitPaint);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2584 次 |
| 最近记录: |