Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Меню жестів

Меню жестів представлено в програмі в вигляді окремого класу, що архітектурно є інструментом – Gesture. Під час запуску програми при створенні екземпляру жестів запускається фонова ініціалізація підказки жестів. Зображення, яке відображається під час входу до меню жестів.

Коли ініціалізація завершена, інструмент готовий до використання. Під час натискання користувачем на кнопку гучності вниз користувач потрапляє до меню жестів, де всі його дії на екрані обробляються функцією OnTouch() цього інструмента (лістинг 3.2.1).

int action = event.getAction() & MotionEvent. ACTION_MASK;
if (event.getPointerCount() > 1){
stopMoveTimer();
if (Data. tools. isPaid()) {
draw. setInstrument(scaleProvider);
scaleProvider. onTouch(event);
}
else
Data. tools. showBuyFullDialog();
return;
}
if (action == MotionEvent. ACTION_DOWN) {
gesture_start. set(event.getX(), event.getY());
gesture_end. set(event.getX(), event.getY());
if (scaleProvider. scale_size!= 1.0f)
startMoveTimer();
} else if (action == MotionEvent. ACTION_MOVE) {
gesture_end. set(event.getX(), event.getY());
if (gesture_end. distanceTo(gesture_start) > move_distanceThreshold)
stopMoveTimer();
} else if (action == MotionEvent. ACTION_UP) {
gesture_end. set(event.getX(), event.getY());
stopMoveTimer();
processGesture(detectGesture(gesture_start, gesture_end), event);
resetPoints();
}
draw. invalidate();

Лістинг 3.2.1 Обробка дотику в меню жестів

 

Прийняттям рішення стосовно виконання дії після завершення жесту займається функція processGesture() (лістинг 3.2.2)

public int detectGesture(Point start, Point end){
if (start. x == -1 || start. y == -1)
return 0;
float dx = end. x - start. x;
float dy = end. y - start. y;
double length = Math. sqrt (Math. pow (dx, 2) + Math. pow (dy, 2));
if (length > 10){ //swipe
if (dx > 0 && Math. abs (dx) > Math. abs (dy)){ //свайп вправо
return R.string. menuRedo;
}
else if (dx < 0 && Math. abs (dx) > Math. abs (dy)){ //свайп влево
return R.string. menuUndo;
}
else if (dy > 0 && Math. abs (dx) < Math. abs (dy)){ //свайп вниз
return R.string. menuClear;
}
else if (dy < 0 && Math. abs (dx) < Math. abs (dy)){ //свайп вверх
return R.string. menuSettings;
}
}
else { //tap
return R.string. TextInputMenuHeader;
}
return 0;
}

public void processGesture(int gestureID, MotionEvent event){
Vibrator v = (Vibrator) context. getSystemService(Context. VIBRATOR_SERVICE);
switch (gestureID){
case R.string. menuUndo:
undoProvider. undo();
break;
case R.string. menuRedo:
undoProvider. redo();
break;
case R.string. menuClear:
draw. clear();
break;
case R.string. menuSettings:
(context).startActivity(new Intent(context, SettingsScreen. class));
break;
case R.string. TextInputMenuHeader:
draw. text. onSelect();
draw. text. onTouch(event);
break;
}
v.vibrate(50);
}

Лістинг 3.2.2 Функція, що визначає дію, яку треба виконати

Всі дії виконуються безпосередньо з об’єктом Draw.


Дата добавления: 2015-08-09; просмотров: 62 | Нарушение авторских прав


Читайте в этой же книге: АНАЛІЗ КОНКУРЕНТНИХ РІШЕНЬ НА РИНКУ | Критерії порівняння програмних продуктів | Огляд програми «SketchBook Express» від Autodesk Inc. | Огляд програми «Рисование» від developer5 | Розроблення структури меню та інтерфейсу програми | Розроблення дизайну меню та елементів управління | Розроблення набору кольорів для палітри | Розроблення алгоритму згладжування кутів | Розроблення алгоритмів динамічного керування товщиною пензля | Розроблення алгоритмів зафарбовування |
<== предыдущая страница | следующая страница ==>
ОПИС ПРОГРАМНОГО ПРОДУКТУ| Головне меню

mybiblioteka.su - 2015-2024 год. (0.005 сек.)