检测单击按钮的位置

时间:2015-06-14 15:24:39

标签: java android android-button

我想知道是否有办法知道按钮的确切位置,并根据用户点击它的位置采取不同的操作。类似的东西:

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;
        }
    }
});

1 个答案:

答案 0 :(得分:1)

未使用OnClickListenerOnTouchListener会为您提供MotionEvent,您可以使用OnClickListener来确定实际触摸事件发生的位置。

例如,我在同一OnTouchListener(称为View)注册两个 rowrow.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}}

  • 之前不做这项工作

我的直觉告诉我,后者应该给你更好的结果(例如,你不会误解长按),但我没有尝试做你想要的。