布局中的数据绑定 onTouch

Data Binding onTouch in a layout

我更改了项目以使用 Android 数据绑定。

除继承 AppCompatImageView 的自定义 SectorImageView 上的 onTouchListener 外,一切正常。它必须是 OnTouch 事件而不是 ClickListener 来处理点击的 x 和 y 坐标。

当我实施 Android 数据绑定 none 时,我的听众工作正常,所以我决定使用 XML 方法。

问题

有没有办法通过简单地向 class 添加一个 OnTouchListener 而不使用 XML 方法来处理 onTouchListener?为什么在我实施 Android 数据绑定时听众不再被识别?

这是我尝试使用的一些代码:

Java代码

@BindingAdapter("app:onTouchListener")
public boolean onTouch(View view, MotionEvent event) {
    // do something
}

XML布局

<x.y.z.SectorImageView
                android:id="@+id/image_sector"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:adjustViewBounds="true"
                app:onTouchListener="@{(view, event) -> onTouch(view, event)}"
                app:srcCompat="@drawable/map" />

错误

****/ data binding error ****msg:Cannot find method onTouch on ViewDataBinding

试试这个:

.java文件中添加:

@BindingAdapter("touchListener")
public void setTouchListener(View self, boolean value){
    self.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent event) {
            // Check if PRESSED
            if (event.getAction() == MotionEvent.ACTION_DOWN){
                // code stuff
            }
            // Check if RELEASED
            else if (event.getAction() == MotionEvent.ACTION_UP) {
                // code stuff
            }
            return false;
       }
    });
}

.xml文件中添加如下:

<x.y.z.SectorImageView  app:touchListener="@{true}"}"/>