Android Canvas.drawText не отображается

У меня есть пользовательский вид, который рисует несколько разных вещей на экране. У каждого есть свой объект рисования. Все рисуется нормально, КРОМЕ текста. Он отлично работает в Gingerbread, но в 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();
}

Сетка, Выбрано и Сегодня работают нормально. Заголовок и дни - это текстовый рисунок, и они не работают.

Вот метод 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);
}

Есть идеи?


person toadzky    schedule 31.07.2012    source источник


Ответы (2)


Я исправил проблему, добавив

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

на мой пользовательский вид. Не уверен, зачем мне это нужно, и если бы кто-нибудь мог объяснить это, это было бы здорово.

person toadzky    schedule 01.08.2012
comment
Это невероятно разочаровывающая проблема, с которой я имел дело в течение последних 2 дней. Установка типа слоя на программное обеспечение также сработала для меня, но я не понимаю, почему! В onDraw — drawCircle, drawRect работают, а drawPath и drawText — нет! Кто-нибудь объяснит? - person autonomy; 29.01.2014

Когда аппаратное ускорение включено, оно иногда выполняет оптимизацию, удаляя вызовы отрисовки, которые, по его мнению, не нужны.

Например, если у вас есть представление под другим представлением, оно может решить не отображать его, предполагая, что оно скрыто, поэтому нет необходимости отображать его.

person Oren Bengigi    schedule 01.08.2012