Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пери перевод.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
103.17 Кб
Скачать

Создание нового графического интерфейса

Базовый класс View — это пустая область экрана размером 100  100 пик-

селов. Если нужно изменить размер элемента и сделать так, чтобы он выво-

дил на экран более привлекательный графический интерфейс, необходимо

переопределить методы onMeasure и onDraw.

Внутри метода onMeasure новое Представление вычисляет высоту и ши-

рину области, которую оно будет занимать, исходя из заданных условий.

В методе onDraw происходит рисование на объекте Canvas.

В листинге 4.10 показан каркас кода для нового класса MyView, который

будет рассматриваться и дорабатываться в следующих разделах.

Листинг 4.10. Создание нового класса для Представления

public class MyView extends View {

// Конструктор, необходимый для создания элемента внутри кода программы

public MyView(Context context) {

super(context);

}

// Конструктор, необходимый для наполнения элемента из файла с ресурсом

public MyView (Context context, AttributeSet ats, int defaultStyle) {

super(context, ats, defaultStyle );

}

// Конструктор, необходимый для наполнения элемента из файла с ресурсом

public MyView (Context context, AttributeSet attrs) {

super(context, attrs);

}

@Override

protected void onMeasure(int wMeasureSpec, int hMeasureSpec) {

int measuredHeight = measureHeight(hMeasureSpec);

int measuredWidth = measureWidth(wMeasureSpec);

// Вы ДОЛЖНЫ сделать вызов метода setMeasuredDimension,

// иначе получится выброс исключения при

// размещении элемента внутри разметки.

setMeasuredDimension(measuredHeight, measuredWidth);

}

private int measureHeight(int measureSpec) {

int specMode = MeasureSpec.getMode(measureSpec);

int specSize = MeasureSpec.getSize(measureSpec);

[ ... Вычисление высоты Представления ... ]

return specSize;

}

private int measureWidth(int measureSpec) {

int specMode = MeasureSpec.getMode(measureSpec);

149 бет

int specSize = MeasureSpec.getSize(measureSpec);

[ ... Вычисление ширины Представления ... ]

return specSize;

}

@Override

protected void onDraw(Canvas canvas) {

[ ... Рисуйте здесь ваш графический интерфейс ... ]

}

}

ВНИМАНИЕ

Внутри обработчика onMeasure вызывается метод setMeasuredDimension.

Вы должны всегда выполнять это действие, иначе ваш элемент выбросит

исключение, когда родительский контейнер попытается разместить его

на экране.

Отрисовка вашего элемента управления

Именно в методе onDraw происходит вся ≪магия≫. Создавая новый вид-

жет с нуля, вы, вероятно, хотите спроектировать для него совершенно новый

графический интерфейс. Параметр Canvas в методе onDraw представляет

собой Холст (Canvas), который используется для реализации идей.

Android предоставляет инструменты, с помощью которых можно изо-

бразить свои задумки, используя объекты Canvas и Paint. Класс Canvas

содержит вспомогательные методы для рисования простых двумерных при-

митивов, включая окружности, линии, прямоугольники, текст и объекты

Drawable (изображения). Кроме того, он поддерживает преобразования,

с помощью которых вы сможете вращать, транслировать (передвигать)

и масштабировать объект Canvas, рисуя на нем.

При использовании этих инструментов в сочетании с классами Drawable

и Paint (последний предоставляет ряд настраиваемых заполнителей и кон-

туров) сложность и детализация вашего элемента ограничиваются только

размерами экрана и мощностью процессора, который все это рисует.