Привязка данных на Touch в макете - PullRequest
0 голосов
/ 11 мая 2019

Я изменил свой проект для использования привязки данных Android.

Все работает отлично, за исключением onTouchListener в моем пользовательском SectorImageView, который наследует AppCompatImageView.Это должно быть событие OnTouch вместо ClickListener для обработки координат x и y клика.

Поскольку я реализовал привязку данных Android, ни один из моих слушателей не работал, поэтому я решил использовать XMLподход.

Вопрос

Есть ли способ обработать onTouchListener простым добавлением OnTouchListener в класс без использования подхода XML?Почему слушатель больше не распознается при реализации привязки данных 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

1 Ответ

0 голосов
/ 11 мая 2019

Попробуйте это:

В .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}"}"/>
...