4

画面にいくつかの異なるものを描画するカスタムビューがあります。それぞれに独自のペイントオブジェクトがあります。テキストを除いて、すべてがうまく描画されています。ジンジャーブレッドでは問題なく動作しますが、ICS+にはテキストがありません。

これが私のオンドローメソッドです:

protected void onDraw(Canvas canvas)
{
   canvas.save(Canvas.MATRIX_SAVE_FLAG);
   canvas.scale(getWidth(), getHeight());

   drawGrid(canvas);
   drawHeader(canvas);
   drawSelected(canvas);
   drawDays(canvas);
   drawToday(canvas);

   canvas.restore();
}

Grid、Selected、Todayは正常に機能します。ヘッダーと日はテキスト描画であり、機能しません。

drawHeaderメソッドは次のとおりです。

private void drawHeader(Canvas canvas)
{
   canvas.drawText("Sun", DAYS[0], .05f, paintDaysOfTheWeek);
   canvas.drawText("Mon", DAYS[1], .05f, paintDaysOfTheWeek);
   canvas.drawText("Tues", DAYS[2], .05f, paintDaysOfTheWeek);
   canvas.drawText("Wed", DAYS[3], .05f, paintDaysOfTheWeek);
   canvas.drawText("Thurs", DAYS[4], .05f, paintDaysOfTheWeek);
   canvas.drawText("Fri", DAYS[5], .05f, paintDaysOfTheWeek);
   canvas.drawText("Sat", DAYS[6], .05f, paintDaysOfTheWeek);

   canvas.drawLine(.01f, .0f, .99f, .0f, paintMediumBlack);
   canvas.drawLine(.01f, .07f, .99f, .07f, paintMediumBlack);
}

何か案は?

4

2 に答える 2

3

追加して問題を修正しました

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
    setLayerType(LAYER_TYPE_SOFTWARE, paint)

私のカスタムビューに。なぜ私がそれを必要としたのか分かりません.誰かがそれを説明できれば、それは素晴らしいことです.

于 2012-08-01T20:13:41.210 に答える
1

ハードウェア アクセラレーションが有効になっている場合、不要と思われる描画呼び出しを削除して最適化を行うことがあります。

たとえば、ビューが別のビューの下にある場合、ビューが非表示であると想定してレンダリングしないことを決定できるため、レンダリングする必要はありません。

于 2012-08-01T21:48:20.380 に答える