Не используется OnClickListener
. OnTouchListener
дает вам MotionEvent
, который вы можете использовать, чтобы определить, где произошло событие касания.
Например, здесь я зарегистрировать какOnClickListener
и OnTouchListener
на том же View
(так называемый row
):
row.setOnClickListener(this);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
row.setOnTouchListener(new View.OnTouchListener() {
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public boolean onTouch(View v, MotionEvent event) {
v
.findViewById(R.id.row_content)
.getBackground()
.setHotspot(event.getX(), event.getY());
return(false);
}
});
}
В этом случае мне не нужно знать, где виджет был растроган для обработки щелчка, но мне нужно знать, где был затронут виджет для настройки фона RippleDrawable
, так что рябь появляется, исходя из того, где пользователь коснулся. Возвращение false
от onTouch()
означает, что я не поглощаю событие касания, и поэтому в конечном итоге мой метод onClick()
также будет вызван.
В вашем случае, либо:
Моя кишка говорит мне, что последнее должно дать вам лучшие результаты (например, вы не будете неправильно толковать длинный щелчок), но я h ave не пытался делать то, что вы ищете.
Координаты крана относительно координат и размеров кнопки кажутся логичным началом. – J0e3gan