Читайте также: |
|
3.1 Загальна структура модуля «полотно»
На рисунку 3.1.1 зображена структура основних класів програми, що відповідають за процес малювання.
Рис. 3.1.1 Структура основних класів полотна
Під час запуску програми створюється клас MainActivity, який далі створює об’єкти усіх інших класів у функції onCreate (лістинг 3.1.1).
Data. init (this);
TimeProvider. start ("start");
getWindow().requestFeature(Window. FEATURE_NO_TITLE);
if (!(Boolean) Data. get (Data. statusBarBoolean ()))
getWindow().setFlags(WindowManager.LayoutParams. FLAG_FULLSCREEN, WindowManager.LayoutParams. FLAG_FULLSCREEN);
if ((Boolean) Data. get (Data. keepScreenOnBoolean ())) {
getWindow().setFlags(WindowManager.LayoutParams. FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams. FLAG_KEEP_SCREEN_ON); //подсветка всегда включена
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp. screenBrightness = 1.0f;
getWindow().setAttributes(lp);
}
draw = new Draw(context);
//задать ориентацию пока не поздно
int current_orientation_canvas = draw. orientationProvider. getScreenOrientation();
int needed_orientation_canvas = (Integer) Data. get (Data. orientationCanvasInt ());
if (needed_orientation_canvas == Draw.OrientationProvider. ORIENTATION_AUTO)
setRequestedOrientation(ActivityInfo. SCREEN_ORIENTATION_UNSPECIFIED);
else if (needed_orientation_canvas == Draw.OrientationProvider. ORIENTATION_VERTICAL)
setRequestedOrientation(ActivityInfo. SCREEN_ORIENTATION_PORTRAIT);
else if (needed_orientation_canvas == Draw.OrientationProvider. ORIENTATION_HORIZONTAL)
setRequestedOrientation(ActivityInfo. SCREEN_ORIENTATION_LANDSCAPE);
//если текущая ориентация не соответствует заданой в настройках - программе гроизт перезагрузка. А значит, грузить текущую сессию дальше нет смысла
if (needed_orientation_canvas!= Draw.OrientationProvider. ORIENTATION_AUTO && current_orientation_canvas!= needed_orientation_canvas) {
Logger. log ("Текущая ориентация холста не совпадает с требуемой - я ухожу.");
return;
}
//Create menu
mainMenu = new MainMenu(this, draw);
//make layout
View mainView = draw;
if ((Boolean) Data. get (Data. paletteStripBoolean ()) && Data. tools. isPaid())
mainView = addBottomPanel(mainView, getBottomPalette());
if ((Boolean) Data. get (Data. menuStripBoolean ()) && Data. tools. isPaid())
mainView = addBottomPanel(mainView, getBottomToolbar());
setContentView(mainView);
processIntent();
Лістинг 3.1.1 Ініціалізація головного екрану програми
Головним об’єктом є клас Draw – він представляє полотно. Всередині він містить змінні для кожного інструмента, та зображення – Bitmap. Під час завантаження програми він виконує ініціалізацію інструментів окремих функціональних модулів (лістинг 3.1.2). Коли ініціалізація завершується, на екрані відображається полотно для малювання і програма готова до роботи.
bitmap = Bitmap. createBitmap (w, h, Bitmap.Config. ARGB_8888);
canvas = new Canvas(bitmap);
//DEFINE INSTRUMENTS AND PROVIDERS
instruments. add(scale = new Scale(this));
instruments. add(brush = new Brush(this));
instruments. add(fill = new Filler(this));
instruments. add(erase = new Eraser(this));
instruments. add(gesture = new Gesture(this));
instruments. add(text = new Text(this));
instruments. add(accurate = new Accurate(this));
instruments. add(line = new Line(this));
instruments. add(pipette = new Pipette(this));
instruments. add(figures = new Figures(this));
providers. add(main = new Main(this));
orientationProvider. afterRotate();
if (currentInstrument == null)
setInstrument("brush");
undoProvider. prepare();
refresh();
doScheduled();
TimeProvider. finish ("start");
Лістинг 3.1.2 Ініціалізація полотна
Дата добавления: 2015-08-09; просмотров: 80 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Розроблення алгоритмів зафарбовування | | | Меню жестів |