Я создаю приложение для Android, которое обращается к canvas
.Для этого я определил прямоугольные области экрана, которые я хочу нарисовать на холсте.Поскольку я всегда рисую фиксированный набор экранных областей, я думал об использовании Enum
(так как Enum
предназначен для фиксированных наборов).
Вот мой enum
:
public enum LayoutEnum {
FULLSCREEN(
new ScreenArea(
new Rect(
0,
0,
MainActivity.getDevice().getWidth(),
MainActivity.getDevice().getHeight()),
Attributes.BG_PAINT)),
LOGO_AREA(
new ScreenArea (
new Rect(
(int) (0.3 * FULLSCREEN.getScreenArea().getArea().width()),
(int) (0.3 * FULLSCREEN.getScreenArea().getArea().width()),
(int) (FULLSCREEN.getScreenArea().getArea().width() - 0.3 * FULLSCREEN.getScreenArea().getArea().width()),
(int) (0.7 * FULLSCREEN.getScreenArea().getArea().width())),
Attributes.BG_PAINT)
);
private ScreenArea screenArea;
LayoutEnum(ScreenArea screenArea) {
this.screenArea = screenArea;
}
public ScreenArea getScreenArea() {
return screenArea;
}
}
ScreenArea
- это простой класс, который содержит Rect
и Paint
и содержит метод draw
(и некоторые методы получения и установки).
У меня есть вопрос: это хороший подход?
С одной стороны, я работаю с фиксированным набором переменных.С другой стороны, эти переменные являются изменчивыми, и я могу изменить их атрибуты (например, используя методы получения и установки).Например, я могу вызвать FULLSCREEN.getScreenArea().getPaint().setColor(Color.BLUE)
Когда вы смотрите на Enum
, он говорит, что это
специальный тип данных, который позволяет переменной быть набором предопределенныхконстанта
Итак, у меня есть фиксированный набор, он предопределен, но не обязательно постоянен.
Мой оригинальный подход заключался в определении класса с именем Layout
, который содержал HashMap
из Screenarea
х.В этом случае я использовал, например, Layout.get("fullscreen").draw(canvas)
, чтобы нарисовать область экрана на холсте.В этом новом подходе я использую, например, FULLSCREEN.getScreenArea().draw(canvas)
.
Одна из причин, по которой я хотел бы перейти, - это ввести безопасное решение.Конечно, можно было бы также переключиться с HashMap
на EnumMap
и сохранить имена моих экранных областей в Enum
.
Надеюсь, вы сможете указать мне правильное направление:направление, которое не только работает (вышеупомянутое уже работает), но также приемлемо и не пахнет.