java - 检测点击按钮的位置

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

最佳答案

不使用 OnClickListenerOnTouchListener 为您提供了一个 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/

相关文章:

android - 如何使按钮的角变圆?

android - Material 设计组件按钮全局主题覆盖 splinter

Java,是否可能 - 自动方法范围跟踪,如 C++ 中的宏

java - 在 Android 中全屏显示来电 Activity

java - 如何使用 com.sun 的包

android - 警报管理器在选定时间之前立即启动警报?

java - 如何在android studio中将图像放在按钮上

java - 关于静态保持器单例模式

Android - ListView 仅显示一行

android - 在 Android 中获取通知接收时间