我想知道是否有一种方法可以准确地知道点击按钮的位置,并根据用户点击按钮的位置采取不同的操作。像这样的东西:
fooBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
switch(onClickLocation){
case LEFT:
foo();
break;
case RIGHT:
bar();
break;
case MIDDLE:
baz();
break;
}
}
});
最佳答案
不使用 OnClickListener
。 OnTouchListener
为您提供了一个 MotionEvent
,您可以使用它来确定实际触摸事件发生的位置。
例如,这里我在同一个View
(称为行
):
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
背景,所以波纹似乎从用户触摸的地方发出。从 onTouch()
返回 false
意味着我没有使用触摸事件,因此最终我的 onClick()
方法也将被调用。
在您的情况下,要么:
在
onTouch()
中执行实际工作,或者在
onTouch()
中缓存最后看到的触摸点,但直到onClick()
才开始工作
我的直觉告诉我,后者应该会给你更好的结果(例如,你不会误解长按),但我没有尝试做你正在寻求的事情。
关于java - 检测点击按钮的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30831129/