События клика, перемещения при касании

|
События клика, перемещения при касании
|
bet | 8/12 | Sana | 16.05.2024 | Hajmi | 2,59 Mb. | | #236947 |
Bog'liq Введение в программирование для платформы AndroidСобытия клика, перемещения при касании
- Первый способ - атрибут onClick
- Второй способ - метод setOnClickListener()
Метод setOnClickListener принимает ссылку на объект, реализующий интерфейс View.OnClickListener, в котором объявлен всего лишь один метод
public abstract void onClick (View v);
где v — вид (виджет или контейнер), по которому осуществлен клик.
Button B = (Button) this.findViewById(R.id. идентификатор_кнопки); B.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
… // Код обработки события клика по виджету v
} });
Для того, чтобы виджету или контейнеру назначить обработчик события перемещения, необходимо воспользоваться методом, объявленным в android.view.View:
public void setOnTouchListener (View.OnTouchListener listner);
Этот метод принимает ссылку на объект, реализующий интерфейс View.OnTouchListener, в котором объявлен один метод- обработчик события:
public abstract boolean onTouch (View v, MotionEvent event);
Метод, обрабатывающий событие, принимает следующие параметры:
■ View v — виджет, источник события.
■ MotionEvent event — объект, содержащий информацию о событии.
LinearLayout LL = (LinearLayout)this.findViewById(R.id.идентификатор_контейнера); LL.setOnTouchListener( new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { … // Код обработки событий касания } });
Событие перемещения представляется объектом MotionEvent, в котором предоставляется инструментарий для получения всевозможных данных о событиях. Этот объект так же позволяет получить информацию о множественных касаниях и перемещениях (это когда пользователь использует в касании несколько пальцев одновременно — например делает движение увеличения изображения)
- public final int getAction() — возвращает числовое значение, идентифицирующее действие пользователя (MotionEvent.ACTION_DOWN — касание, MotionEvent. ACTION_MOVE — перемещение, MotionEvent.ACTION_ UP — отпускание и т. д.).
- public final float getX() — возвращает X-координату первого указателя (пальца пользователя).
- public final float getY() — возвращает Y-координату первого указателя
- public final int getPointerCount() — возвращает количество указателей (пальцев пользователя) участвующих в событии.
- public final float getX(int pointerIndex) — возвращает X-координату указателя, индекс которого задается в параметре pointerIndex.
- public final float getY(int pointerIndex) — возвращает Y-координату указателя, индекс которого задается в параметре pointerIndex.
- public final float getPressure (int pointerIndex) — возвращает силу давления указателя, индекс которого задается в параметре pointerIndex
Пример.
//Поля в активности
//Виджет TextView для вывода информации о клике private TextView tvClickInfo; //Виджет TextView для вывода информации о перемещении private TextView tvMotionInfo; //Счетчик количества кликов private int cntClick;
//--- Инициализируем поля объекта ---------------- this.tvClickInfo = (TextView) this.findViewById(R.id.tvClickInfo); this.tvMotionInfo = (TextView) this.findViewById(R.id.tvMotionInfo); //-- Находим главный контейнер в макете Активности - LinearLayout LL = (LinearLayout) this.findViewById(R.id.ll1);
//-- Назначем обработчик события "Прикосновения/ //Перемещения" ------- LL.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent event) { //-- Получение типа события ---------------------- int action = event.getAction(); //-- Получение координат касания ----------------- float x = event.getX(); float y = event.getY(); //-- Формирование строки с информацией о событии -- String S = ""; switch (action) { case MotionEvent.ACTION_DOWN: S += "Нажатие\n"; break; case MotionEvent.ACTION_MOVE: S += "Перемещение\n"; break; case MotionEvent.ACTION_UP: S += "Отпускание\n"; break; } S += "X = " + x + "\nY = " + y; //-- Вывод информации о событии ------------------ MainActivity.this.tvMotionInfo.setText(S); return false; } });
//-- Назначаем обработчик клика ------------------ LL.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //-- Увеличиваем счетчик количества кликов по Активности - MainActivity.this.cntClick++; //-- Отображаем информацию в виджете tvClickInfo -- MainActivity.this.tvClickInfo.setText( "Количество кликов: " + MainActivity.this.cntClick); } });
|
| |