CustomView переопределяет onTouch () и устанавливает дополнительный GestureDetector через setOnTouchListener ()

Возможно ли создать настраиваемое представление, которое одновременно переопределяет функцию onTouch() внутри этой реализации настраиваемого представления и позволяет установить настраиваемый GestureDetector через setOnTouchListener().

  1. Я хотел бы переопределить метод onTouch () для реализации некоторой логики рисования в представлении, связанной с сенсорными жестами.
  2. Тогда я хотел бы использовать такое автономное настраиваемое представление, чтобы присоединить к нему GestureDetector, чтобы обнаруживать и обрабатывать некоторые настраиваемые жесты в этом представлении внутри Activity.

У меня это работает, только если у меня есть реализация рисования onTouch () или только setOnTouchListener () для обнаружения жестов. Может быть, я мог бы поместить это обнаружение жестов изнутри. Но я бы предпочел, чтобы это был отдельный слабо связанный компонент многократного использования, а не жестко связанный детектор жестов.


person Michał Ziobro    schedule 29.08.2017    source источник


Ответы (1)


Вы можете сделать что-то вроде этого:

public class CustomTouchView extends View {

    private OnTouchListener onTouchListener;

    public CustomTouchView(Context context) {
        super(context);
    }

    @Override
    public void setOnTouchListener(OnTouchListener l) {
        super.setOnTouchListener(l);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (onTouchListener != null) {
            return onTouchListener.onTouch(this, event);
        } else {
            return super.onTouchEvent(event);
        }

        // or implement your custom touch logic here 
    }
}
person Anton Potapov    schedule 29.08.2017
comment
Думаю, это привело меня к какому-то решению. Я использовал в CustomTouchView () конструктор setOnTouchListener (this) и реализовал onTouch (). Поэтому я вместо этого создаю собственное частное поле TouchViewGestureDetector и добавляю метод установки setTouchViewGestureDetector (детектор). Затем внутри переопределения onTouch в CustomTouchView я добавил if (mGestureDetector! = Null) mGestureDetector.onTouch (event); - person Michał Ziobro; 29.08.2017
comment
@ MichałZiobro не стесняйтесь отмечать мой ответ, если он вам помог. Спасибо - person Anton Potapov; 30.08.2017