如何检测屏幕上的轻触?

9
更具体地说,我要在哪里附加OnGestureListener,以便我可以在屏幕上的任何地方检测到onSingleTapUp,即使一个ImageView占据了一半的屏幕。

现在,我把监听器放在拥有ImageView的Activity中。
但是,只有当我点击ImageView之外的区域时,监听器才会触发。

我阅读并尝试理解这个问题,但无法正确实现它。

此代码位于Activity中。

 public boolean onSingleTapUp(MotionEvent e) {
    //addtext.setText("-" + "SINGLE TAP UP" + "-");
    //Log.d(TAG, "- + SINGLE TAP UP + - ***********************************************************************");  
    int btnsize = buttonSave.getHeight();
    int viewWidth = display.getWidth();
    int viewHeight = display.getHeight();

    // RIGHT SIDE SCREEN
    if(e.getX()> (viewWidth*0.7)){
        Log.d(TAG, "RIGHT SIDE");
        if(e.getY()> viewHeight*0.7){         
            Log.d(TAG, "right down on screen");
        }else if(e.getY()> (viewHeight*0.45)){ 
            Log.d(TAG, "right middle on screen   ");
        }
    }
    // LEFT SIDE SCREEN
    if(e.getX()< (viewWidth*0.3)){
        Log.d(TAG, "LEFT SIDE");
        if(e.getY()> viewHeight*0.7){ 
            Log.d(TAG, "Left middle on screen  ");
        }else if(e.getY()> (viewHeight*0.45)){
            Log.d(TAG, "Left down on screen ");
        }
    }
    return true;
}

1
不确定是否有更好的方法,但您可以将onTouchEvent注册到所有视图中。 - Jason
2个回答

10

检测屏幕轻触

我将回答如何简单地检测屏幕轻触的问题:

  1. Add an android:onClick value to your base/root layout (LinearLayout, RelativeLayout, etc.). You can call it anything you want, I'm naming it screenTapped as an example:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools" 
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:onClick="screenTapped">
    
  2. Add this method to your Activity using the same name you specified for onClick:

    public void screenTapped(View view) {
        // Your code here
    }
    
现在,点击屏幕将会调用上述方法。

1
我正在回答自己的问题。感谢上面的@Jason。我已经将onTouchEvent注册到所有视图中。
它运行得很好。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接