2

カスタム テキスト レイアウト エンジンを備えたアプリケーションを作成しています。これを機能させるには、Paint クラスの .getTextBounds() メソッドを使用して、大量 (数千) の文字列を測定する必要があります。

それは機能します。ただし、一部のデバイスでは、この測定は非常に遅くなります。

たとえば、5 ~ 6 文字の長さの単語を 10,000 個測定すると、

  • Samsung Galaxy S2 携帯電話 (または Samsung Galaxy シリーズのその他の種類のデバイス): 1.5 秒
  • HTC Desire HD: ~90 秒。
  • Asus Transformer TF300: ~30 秒
  • 等。

メソッドのプロファイリングを行ったところ、一部のデバイスでは測定メソッドのネイティブな Skia 実装にかなりの時間がかかることがわかりました。

測定中に特別なことは何もしていません。コードは次のようになります。

Paint paint = new Paint();
Rect bounds = new Rect();
paint.setTextSize(22.0f);

for (int i = 0; i < input.length; i++) {
    paint.getTextBounds(input[i], 0, input[i].length(), bounds);
}

テキストの寸法を測定する際に注意することはありますか? メーカーは、ROM のフォント キャッシュの実装に関連する何かを台無しにしましたか? これについて何かできることはありますか?

4

0 に答える 0