`drawTextOnPath()`在启用硬件加速时表现奇怪

5
ScrollViewListView 中添加 硬件加速 的自定义 View,下面两个代码片段都能产生相同的结果:(暂时忽略最佳实践)
@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas); 
    // centering stuff
    float centerX = getWidth() / 2f;
    float centerY = getHeight() / 2f;
    float size = 80;
    float halfSize = size / 2f;
    float left = centerX - halfSize;
    float top = centerY - halfSize;
    
    RectF oval = new RectF(left, top, left + size, top + size);
    
    Path path = new Path();
    path.addArc(oval, 160, 359);
    
    Paint paint = new Paint();
    paint.setTextSize(30);
    paint.setStyle(Style.STROKE);
    
    canvas.drawTextOnPath("Hello world", path, 0, 0, paint); //<--- line A
    canvas.drawCircle(centerX, centerY, 10, paint);          //<--- line B
}

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas); 
    // centering stuff
    float centerX = getWidth() / 2f;
    float centerY = getHeight() / 2f;
    float size = 80;
    float halfSize = size / 2f;
    float left = centerX - halfSize;
    float top = centerY - halfSize;
    
    RectF oval = new RectF(left, top, left + size, top + size);
    
    Path path = new Path();
    path.addArc(oval, 160, 359);
    
    Paint paint = new Paint();
    paint.setTextSize(30);
    paint.setStyle(Style.STROKE);
    
    canvas.drawCircle(centerX, centerY, 10, paint);          //<--- line B
    canvas.drawTextOnPath("Hello world", path, 0, 0, paint); //<--- line A
}

相同结果:

enter image description here


但是,随着代码段的更新,一旦您滚动ScrollView(我下面有不可见的虚拟View,所以我可以滚动)并且helloworld触摸ActionBar,就会发生非常有趣的事情,您会看到一些智能人类在旧Windows操作系统中使用过的东西

enter image description here


enter image description here

我知道drawTextOnPath()在硬件加速模式下不受支持,但如果您首先调用它,为什么它会起作用?

1个回答

2

drawTextOnPath()在Android 4.1之后支持硬件加速。官方文档在这里提到过。

但是下一个评论似乎表明了你可能会遇到的问题,可能是一个bug。

当然,对于Android 4.1之前的版本,可以通过在View上调用View.setLayerType(View.LAYER_TYPE_SOFTWARE, null)来设置软件层类型,以达到性能和错误之间的平衡。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接