0

有人可以帮助我,因为我无法再让 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 - '不能从静态上下文引用非静态方法',因为我没有扩展视图
  • 禁用硬件加速(在清单中)。

我确实发现了一个 SO 帖子 Canvas.drawTextOnPath(...) not working on Lollipop 说 drawTextOnPath 从 Lollipop 开始就坏了,你必须重新缩放和重新计算画布上的所有内容,但工作量很大,我已经看过几个帖子从那时起,似乎发现它工作正常,所以我怀疑这没有必要。

还有其他建议吗?

4

1 回答 1

0

我设法通过稍后调用该代码来解决这个问题。原来是在Engine.onCreate中,跟在后台和表盘的初始化之后;现在它在 onApplyWindowinsets 的末尾被调用并且可以正常工作。

于 2018-07-23T09:47:02.310 回答