Android! Разработка мобильных


Sudokuv2/src/org/example/sudoku/PuzzleView.java



Pdf көрінісі
бет54/87
Дата26.01.2023
өлшемі3,48 Mb.
#63133
1   ...   50   51   52   53   54   55   56   57   ...   87
 Sudokuv2/src/org/example/sudoku/PuzzleView.java
private void select(int x, int y) {
invalidate(selRect);
selX = Math.min(Math.max(x, 0), 8);
selY = Math.min(Math.max(y, 0), 8);
getRect(selX, selY, selRect);
invalidate(selRect);
}
Обратите вни�ание на два вызова invalidate()� Первый �ооб�ает ������� 
о то�� что про�тран�тво� покрытое �тары� пря�оу�ол�нико� выделения (�лева на 
ри�� 4�5)� должно быт� перери�овано� Второй вызов invalidate() �оворит о то�� что 
нову� обла�т� выделения (�права на ри�унке) тоже нужно перери�оват�� В реал��
но�ти �ы ниче�о зде�� не ри�уе��
Вот очен� важный �о�ент: нико�да не вызывайте функ�ии ри�ования ни�де� 
кро�е �етода onDraw()� В�е�то �то�о и�пол�зуйте �етод invalidate()� чтобы от�е�
тит� обла�т� как �рязну�� недей�твител�ну� (dirty)� Менеджер окон �обирает в�е 
«�рязные» пря�оу�ол�ники и в некоторый �о�ент вызывает 
onDraw()
� Недей�тви�
тел�ные обла�ти �тановят�я обла�тя�и обрезки� таки� образо�� обновление �крана 
опти�изировано в ра�чете тол�ко на те обла�ти� которые �еня�т�я�
ОПТИМИЗАЦИЯ ОБНОВЛЕНИЯ
В ранней версии этого примера я делал недействительным весь экран . Таким образом, каждое 
нажатие кнопки приводило к необходимости перерисовывать всю головоломку . Это вызывало 
заметные «подтормаживания» . Изменение кода таким образом, чтобы он помечал недействи-
тельным лишь небольшие участки экрана, привело к ускорению работы программы .
Тепер� давайте �набди� и�рока воз�ожно�т�� вводит� новое чи�ло в выбранное 
поле�
Ввод чисел
Для обработки ввода � клавиатуры �ы добави� не�кол�ко �трок в оператор 
case
в �етоде 
onKeyDown()
для чи�ел от 0 до 9 (0 или пробел означает �тирание 
чи�ла)�
 Sudokuv2/src/org/example/sudoku/PuzzleView.java
case KeyEvent.KEYCODE_0:
case KeyEvent.KEYCODE_SPACE: setSelectedTile(0); break;
case KeyEvent.KEYCODE_1: setSelectedTile(1); break;
case KeyEvent.KEYCODE_2: setSelectedTile(2); break;
case KeyEvent.KEYCODE_3: setSelectedTile(3); break;
case KeyEvent.KEYCODE_4: setSelectedTile(4); break;


4 .3 . Обработка ввода 83
case KeyEvent.KEYCODE_5: setSelectedTile(5); break;
case KeyEvent.KEYCODE_6: setSelectedTile(6); break;
case KeyEvent.KEYCODE_7: setSelectedTile(7); break;
case KeyEvent.KEYCODE_8: setSelectedTile(8); break;
case KeyEvent.KEYCODE_9: setSelectedTile(9); break;
case KeyEvent.KEYCODE_ENTER:
case KeyEvent.KEYCODE_DPAD_CENTER:
game.showKeypadOrError(selX, selY);
break;
Для поддержки джой�тика �ы проверяе� нажатие клавиши 
Enter
или �ентрал��
ной кнопки джой�тика в 
onKeyDown()
и показывае� в�плыва��у� клавиатуру� 
которая позволяет пол�зовател� выбрат�� какое и�енно чи�ло нужно раз�е�тит� 
в ячейке�
Для тач��кринов �ы переопределяе� �етод 
onTouchEvent()
и выводи� на �кран 
клавиатуру� которая будет �оздана позже:


Достарыңызбен бөлісу:
1   ...   50   51   52   53   54   55   56   57   ...   87




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет