canvas.drawTextOnPath不再起作用

时间:2018-07-18 12:01:39

标签: android watchface

有人不能帮我,因为我不能再继续使用drawTextOnPath了?

我写的表盘在升级到手表软件(和手机)后无法正常工作,所以我正在写 使用当前表盘模板(targetSdk 27​​)从头开始重新设置。 目前,我有这个(在Engine类的onCreate期间按照背景位图进行设置的方法中):

            Paint mDayDialPaint2 = new Paint();
        mDayDialPaint2.setColor(Color.RED);
        mDayDialPaint2.setTextSize(10f);
        mDayDialPaint2.setAntiAlias(true);
        mDayDialPaint2.setStrokeWidth(65f);
        mDayDialPaint2.setStyle(Paint.Style.FILL_AND_STROKE);
        mDayDialPaint2.setTextAlign(Paint.Align.LEFT);
//      canvas.drawTextOnPath(wkendText, textPathDay, 1f, 4f, mDayDialPaint2);
        canvas.drawTextOnPath("abcdefgh", textPathDay, 1f, 4f, mDayDialPaint2);
        //View.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
        //canvas.drawPath(textPathDay, mDayDialPaint2);

当我取消注释canvas.drawPath作为测试时,它可以工作。所以路径存在并且在正确的位置。

我尝试了各种文本大小和笔触宽度,几种样式的变化,无论是否有文本对齐。

遵循SO和其他地方的建议,我也尝试过:

  • setLayerType-'无法从静态上下文引用非静态方法',因为我没有扩展View
  • 禁用硬件加速(清单中)。

我确实找到了SO帖子 Canvas.drawTextOnPath(...) not working on Lollipop 那说drawTextOnPath自Lollipop起就坏了,您必须重新缩放并重新计算画布上的所有内容,但是这是很多工作,从那以后我看过好几篇文章似乎都行得通,所以我怀疑这没有必要。 >

还有其他建议吗?

1 个答案:

答案 0 :(得分:0)

我设法通过稍后调用该代码来解决此问题。最初是在Engine.onCreate中,对背景和表盘进行了初始化;现在,它在onApplyWindowinsets的末尾被调用,并且可以正常工作。