Главная » Разработка для Android » Отрисовка вашего элемента управления

0

Именно в методе onDraw происходит вся «магия». Создавая новый вид- жет с нуля, вы, вероятно, хотите спроектировать для него совершенно новый графический интерфейс.  Параметр  Canvas в методе onDraw  представляет собой Холст (Canvas), который используется для реализации идей.

Android  предоставляет инструменты,  с помощью которых можно изо- бразить  свои задумки,  используя объекты  Canvas  и Paint.  Класс  Canvas содержит вспомогательные методы для рисования простых двумерных при- митивов,  включая  окружности,  линии,  прямоугольники, текст и объекты Drawable  (изображения). Кроме того, он поддерживает преобразования, с помощью  которых  вы сможете вращать,  транслировать (передвигать) и масштабировать объект Canvas, рисуя на нем.

При использовании этих инструментов в сочетании с классами Drawable и Paint (последний предоставляет ряд настраиваемых заполнителей и кон- туров) сложность  и детализация вашего элемента ограничиваются только размерами  экрана и мощностью процессора, который все это рисует.

ВНИМАНИЕ

Один из наиболее важных моментов при написании эффективного кода в Android — необходимость избегать повторного создания и разрушения объектов. Любой объект, выполненный внутри метода onDraw, будет создаваться и разрушаться при каждом обновлении экрана. Повышайте эффективность своего кода, перенося как можно больше таких объектов (в частности, экземпляры Paint и Drawable) в область видимости класса, передавая их создание конструктору.

В листинге 4.11 показано, как переопределить метод onDraw, чтобы ото- бражать в центре экрана простую текстовую строку.

Листинг 4.11. Отрисовка нестандартного Представления

@Override

protected void onDraw(Canvas canvas) {

// Получите размер элемента, основываясь на последнем вызове обработчика onMeasure.

int height = getMeasuredHeight();

int width = getMeasuredWidth();

// Найдите центр int px = width/2; int py = height/2;

// Создайте новые кисти для рисования.

// ЗАМЕТКА: В целях повышения эффективности, это

// должно быть сделано в конструкторе Представления Paint mTextPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mTextPaint.setColor(Color.WHITE);

// Определите строку.

String displayText = "Hello World!";

// Измерьте ширину текстовой строки.

float textWidth = mTextPaint.measureText(displayText);

// Нарисуйте текстовую строку в центре элемента. canvas.drawText(displayText, px-textWidth/2, py, mTextPaint);

}

Более подробная  информация о методах рисования сложных графиче- ских элементов содержится  в главе 15.

ПРИМЕЧАНИЕ

На сегодняшний день Android не имеет поддержки векторной графики. Как результат, изменения в любом элементе, размещенном на объ- екте Canvas, приводят к перерисовке всего Холста, изменение цвета кисти не повлияет на отображаемое Представление, пока оно не будет помечено как недействительное и не перерисуется. В качестве альтер- нативы для отрисовки графики вы можете использовать OpenGL. Для получения более подробной информации ознакомьтесь с описанием класса SurfaceView в главе 15.

Источник: Майер P. Android 2 : программирование приложений для планшетных компьютеров и смартфонов : [пер. с англ. ] / Рето Майер. — М. : Эксмо, 2011. — 672 с. — (Мировой компьютерный бестселлер).

По теме:

  • Комментарии