з
адачи
В этой главе вы узнаете:
1) как получить событие касания и реализовать реакцию на него;
2) как получить событие нажатия клавиши на клавиатуре и реализовать ре
-
акцию на него;
3) как обрабатывать сложные жесты.
A
ndroid
Поддержка жестов в Android имеет немного сложный API, но она достаточно
прозрачна, и, как разработчик, вы будете иметь всю информацию, необходи
-
мую для удовлетворения даже самых требовательных приложений, предпола
-
гающих большое число касаний.
74
Пользовательский ввод
Получение события касания и реакция на него
Касание – это, пожалуй, самая распространенная форма пользовательского
ввода в большинстве современных мобильных приложений. Это может быть
касание кнопки для отправки формы, касание поля ввода текста для переда
-
чи ему фокуса ввода, долгое касание с целью открыть контекстные параметры
или двойное касание для увеличения/уменьшения масштаба карты. Все эти со
-
бытия являются интуитивно понятными выражениями желаний пользователя.
Поэтому неудивительно, что Android делает захват сигналов касаний прос-
тым и доступным.
По историческим причинам в платформе Android все еще используется термин
«щелчок». В большинстве окружений с сенсорным экраном под «щелчком» под
-
разумевается «касание».
Все экземпляры
View
(включая
ViewGroup
) имеют настраиваемое свойство
View.OnClickListener
(через
setOnClickListener
). После его настройки система
возьмет на себя все сложности, связанные с организацией получения и достав
-
ки события касания, и всякий раз, распознав жест, будет вызывать метод
on
Click
слушателя событий. Чтобы удалить реакцию на касание из данного пред
-
ставления, достаточно записать в это свойство значение
null
, вызвав
myView.
setOnClickListener(null);
.
Обратите внимание, что
View.OnClickListener
– это простой функциональный
интерфейс с единственным методом
onClick(View
view)
. Вот его определение,
буквально скопированное из исходного кода, имевшегося в момент написания
этой книги:
public interface OnClickListener {
void onClick(View v);
}
Этот интерфейс может быть реализован практически на любом уровне –
в контроллере
Ac ti vi ty
или
Fragment
, в самом экземпляре
View
, в анонимном
классе или в виде лямбда-выражения или ссылки на метод. Кроме того, об
-
работчики событий касания можно назначать в макетах XML. Далее мы рас
-
смотрим все эти подходы по очереди.
Реализация
View.OnClickListener
в контроллере:
Java
public class MyAc
ti
vi
ty extends Ac
ti
vi
ty implements View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Button button = new Button(this);
button.setText("Click me!");
button.setOnClickListener(this);
setContentView(button);
}
@Override
public void onClick(View view) {
Android
75
Log.d("MyTag", "View was clicked " + view.toString());
}
}
Kotlin
class MyAc ti vi ty : Ac ti vi ty(), View.OnClickListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val button = Button(this)
button.text = "Click me!"
button.setOnClickListener(this)
setContentView(button)
}
override fun onClick(view: View) {
Log.d("MyTag", "View was clicked $view")
}
}
В виде ссылки на метод:
Java
public class MyAc ti vi ty extends Ac ti vi ty {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Button button = new Button(this);
button.setText("Click me!");
button.setOnClickListener(this::myClickMethod);
setContentView(button);
}
public void myClickMethod(View view) {
Log.d("MyTag", "View was clicked " + view.toString());
}
}
Kotlin
class MyAc ti vi ty : Ac ti vi ty() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val button = Button(this)
button.text = "Click me!"
button.setOnClickListener(::onClick)
setContentView(button)
}
fun onClick(view: View) {
Log.d("MyTag", "View was clicked $view")
}
}
76
Пользовательский ввод
В виде лямбда-выражения:
Do'stlaringiz bilan baham: |