GestureDetector: разрешить вызов onScroll, не используя событие касания

#android #user-interface #kotlin #touch-event

#Android #пользовательский интерфейс #kotlin #событие касания

Вопрос:

Итак, у меня есть макет, который отображается по всему экрану, и я предполагаю перехватывать события прокрутки и отправки, где бы они ни находились. Проблема в том, что вы не можете этого сделать, если не используете прослушиватель, таким образом, touchListeners других представлений никогда не будут вызываться, и этого не может произойти.

Примером кода будет это:

 private val onTouchListener = object : View.OnTouchListener {
    override fun onTouch(v: View?, motionEvent: MotionEvent): Boolean {

        //this block will be reached only once, even when you scroll

        GestureDetector(activity, object : GestureDetector.SimpleOnGestureListener() {
            override fun onScroll(e1: MotionEvent?, e2: MotionEvent?, distanceX: Float, distanceY: Float): Boolean {
                //is never called
                return false
            }
            override fun onFling(e1: MotionEvent?, e2: MotionEvent?, distanceX: Float, distanceY: Float): Boolean {
                //is never called
                return false
            }
        })

        return false //if this will be 'true', the block will be reached for as long as the touch continues, but touch events bellow it won't invoke
    }
}
  

это комментарий Android к этой проблеме. Честно говоря, это кажется не очень справедливым.

От:http://developer.android.com/guide/topics/ui/ui-events.html

onTouch() — возвращает логическое значение, указывающее, использует ли ваш слушатель это событие. Важно то, что это событие может иметь несколько действий, которые следуют друг за другом. Итак, если вы возвращаете false при получении события down action, вы указываете, что вы не использовали событие и также не заинтересованы в последующих действиях из этого события. Таким образом, вы не будете вызваны для каких-либо других действий в рамках события, таких как жест пальцем или возможное событие действия вверх.

Что я могу сделать? Спасибо