OnClickListener - x, y местоположение события?
У меня есть пользовательский вид, полученный из представления. Я хочу, чтобы вас уведомили, когда щелкнули изображение, и местоположение x, y, где произошел щелчок. То же самое для длинных кликов.
Похоже, мне нужно переопределить onTouchEvent()
. Нет ли способа получить местоположение x, y события из OnClickListener
вместо этого?
Если нет, то какой хороший способ сказать, является ли событие движения "реальным" кликом и длинным кликом и т.д.? onTouchEvent
генерирует много событий в быстрой последовательности и т.д.
Ответы
Ответ 1
Спасибо. Это именно то, что я искал. Теперь мой код:
imageView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN){
textView.setText("Touch coordinates : " +
String.valueOf(event.getX()) + "x" + String.valueOf(event.getY()));
}
return true;
}
});
который делает именно то, о чем просил Марк...
Ответ 2
Переопределить onTouchEvent (MotionEvent ev)
Затем вы можете сделать:
ev.getXLocation()
Или что-то в этом роде. Имейте шарики.
Ответ 3
Полный пример
В других ответах отсутствуют некоторые детали. Вот полный пример.
public class MainActivity extends AppCompatActivity {
// class member variable to save the X,Y coordinates
private float[] lastTouchDownXY = new float[2];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// add both a touch listener and a click listener
View myView = findViewById(R.id.my_view);
myView.setOnTouchListener(touchListener);
myView.setOnClickListener(clickListener);
}
// the purpose of the touch listener is just to store the touch X,Y coordinates
View.OnTouchListener touchListener = new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// save the X,Y coordinates
if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {
lastTouchDownXY[0] = event.getX();
lastTouchDownXY[1] = event.getY();
}
// let the touch event pass on to whoever needs it
return false;
}
};
View.OnClickListener clickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
// retrieve the stored coordinates
float x = lastTouchDownXY[0];
float y = lastTouchDownXY[1];
// use the coordinates for whatever
Log.i("TAG", "onLongClick: x = " + x + ", y = " + y);
}
};
}
Резюме
- Добавить переменную класса для хранения координат
- Сохраните координаты X, Y с помощью
OnTouchListener
- Доступ к координатам X, Y в
OnClickListener