Как управлять возвращаемым значением onTouchListener из события ACTION_MOVE, как я хочу изменить (true или false) возвращаемое значение при вызове события ACTION_MOVE - PullRequest
3 голосов
/ 15 октября 2019

Я хочу создать CardStackView с прокруткой содержимого, но у меня возникли проблемы с NestedScrollView и onTouchListener.

Я использую CardStackView и хочу добавить прокручиваемый контент внутри CardView. после добавления NestedScrollView в XML-файл строки мой Swipe не работает.

holder.textViewCheck.setOnTouchListener(onTouchListener())

в этом коде ниже я отключаю прокрутку при обнаружении пролистывания влево и вправо в TouchListener, но одновременно работает только одна функция.

private var xDelta: Int = 0
    private var yDelta: Int = 0
    private fun onTouchListener(): OnTouchListener {
        return OnTouchListener { view, event ->
            val x = event.x.toInt()
            val y = event.y.toInt()
            val tAG = "AppName"

            when (event.actionMasked) {

                MotionEvent.ACTION_DOWN -> {
                    cardStackManager.setSwipeableMethod(SwipeableMethod.None)

                    xDelta = x
                    yDelta = y

                    true
                }

                MotionEvent.ACTION_UP -> {
                    cardStackManager.setSwipeableMethod(SwipeableMethod.AutomaticAndManual)
                    Toast.makeText(mContext, "thanks for new location!", Toast.LENGTH_SHORT).show()

                    false
                }

                MotionEvent.ACTION_MOVE -> {
                    val finalX = event.x
                    val finalY = event.y

//                    Log.e(tAG, "xDelta $xDelta ---------- FinalX $finalX ---------- Final+X ${xDelta + 100}")
//                    Log.e(tAG, "xDelta $xDelta ---------- FinalX $finalX ---------- Final-X ${xDelta - 100}")

                    when {
                        finalX > xDelta + 100 -> {
                            view.parent.requestDisallowInterceptTouchEvent(false)
                            cardStackManager.setSwipeableMethod(SwipeableMethod.AutomaticAndManual)
//                            Log.e(tAG, "Left to Right swipe performed")

                            true
                        }

                        finalX < xDelta - 100 -> {
                            view.parent.requestDisallowInterceptTouchEvent(false)
                            cardStackManager.setSwipeableMethod(SwipeableMethod.AutomaticAndManual)
//                            Log.e(tAG, "Right to Left swipe performed")

                            true
                        }

                        yDelta < finalY -> {
                            view.parent.requestDisallowInterceptTouchEvent(true)
                            cardStackManager.setSwipeableMethod(SwipeableMethod.None)
//                            Log.e(tAG, "Up to Down swipe performed")

                            false
                        }

                        yDelta > finalY -> {
                            view.parent.requestDisallowInterceptTouchEvent(true)
                            cardStackManager.setSwipeableMethod(SwipeableMethod.None)
//                            Log.e(tAG, "Down to Up swipe performed")
                            false
                        }
                    }
                }
            }
            true
        }
    }

Ниже приведена ссылка на библиотеку CardStakeView для проверки и легкого понимания моей проблемы.

Я настраиваю эту библиотеку

https://github.com/yuyakaido/CardStackView

Спасибо

1 Ответ

0 голосов
/ 16 октября 2019

Я думаю, вы хотите добиться независимой прокрутки, верно? https://github.com/TakuCoder/MultiScrollView.git Следуй за моим репозиторием Github

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...