Java 试图理解Android中触摸处理的逻辑

Java 试图理解Android中触摸处理的逻辑,java,android,Java,Android,我已经对Java有了基本的了解,但我承认接口仍然让我有点困惑。我正在读一本Android编程书,关于手势的整个部分让我困惑不解。我使用下面的代码来处理与手势相对应的触摸事件,它的工作原理与我直接从书中复制的一样,但我试图理解它的工作原理 import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.GestureDetector; import android.widg

我已经对Java有了基本的了解,但我承认接口仍然让我有点困惑。我正在读一本Android编程书,关于手势的整个部分让我困惑不解。我使用下面的代码来处理与手势相对应的触摸事件,它的工作原理与我直接从书中复制的一样,但我试图理解它的工作原理

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.GestureDetector;
import android.widget.TextView;
import android.view.MotionEvent;
import androidx.core.view.GestureDetectorCompat;

public class MainActivity extends AppCompatActivity implements GestureDetector.OnGestureListener, GestureDetector.OnDoubleTapListener {
    private GestureDetectorCompat gDetector;
    private TextView gestureText;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        gestureText = findViewById(R.id.gestureStatusText);
        
        this.gDetector = new GestureDetectorCompat(this,this);
        gDetector.setOnDoubleTapListener(this);
    }
    
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        this.gDetector.onTouchEvent(event);
        return super.onTouchEvent(event);
    }

    // ... other event handlers
}
几句话把我弄糊涂了。 为什么此行要为其两个参数传递“this”标识符?我想我知道“this”指的是当前的类,所以其他类可以传入吗

this.gDetector = new GestureDetectorCompat(this, this);
这个方法在做什么?具体来说,为什么在第一行使用创建的类,为什么返回super方法?为什么两者都有

public boolean onTouchEvent(MotionEvent event) {
    this.gDetector.onTouchEvent(event);
    return super.onTouchEvent(event);
}

感谢您的回复,Android真的让我很困惑。

您可以看到
新的GestureDetectorCompat()
是一个公共构造函数,它接受两个参数
上下文
GestureDetector.OnGetureListener

即使在这种情况下,
this
关键字也用于相同的上下文和含义

您缺少的一点是,
this
关键字表示当前的“对象”,而不是当前的“类”。因此,如果您创建这个“接口”的对象(当然是通过在另一个类中实现它),那么
this
关键字将表示该特定对象


当发生特定的运动事件时,
GestureDetector.OnGestureListener
回调将通知用户。此类只能用于通过触摸报告的MotionEvents

this.gDetector.onTouchEvent(事件)这将通过显示true或false来指示要处理的事件是否成功

super.onTouchEvent(事件)这是一个使用所有其他手势事件的调用

你也可以参考一下。

我想我开始明白了。有一件事我仍然不确定,为什么onTouchEvent首先使用这个.gDetector.onTouchEvent(事件);然后使用super.onTouchEvent(事件);返回布尔值。@maca2kx
this
super
是java中的两个关键字,当使用
this时,它们有自己的含义。
表示您希望访问类中的某些内容,它可以是变量或方法,在您的情况下,
this.gDetector.onTouchEvent(事件)
它正在访问在
GestureDetectorCompat
中编写的方法,该方法返回false或true。同样地,
super.
使用时,我们可以访问直接父类的所有变量和方法,正如您现在所知道的
onTouchEvent(event)
return
boolean
so
super.onTouchEvent(事件)它调用它的父对象来检查任何其他操作,如果是,则返回true我想我明白了。谢谢你的耐心!