我想知道是否有办法知道按钮的确切位置,并根据用户点击它的位置采取不同的操作。类似的东西:
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;
}
}
});
答案 0 :(得分:1)
未使用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()
表示我没有使用触摸事件,因此最终我的onTouch()
方法也会被调用。
在您的情况下,要么:
在onTouch()
或
缓存onClick()
中最后一次看到的触摸点,但在{{1}}
我的直觉告诉我,后者应该给你更好的结果(例如,你不会误解长按),但我没有尝试做你想要的。