Passar evento de movimento para o Scrollview pai quando o Listview na parte superior / inferior

eu tenho umListView em umScrollView para mostrar comentários e eu gostaria de fazer o seguinte:

Quando o usuário desliza para baixo, primeiro oScrollView deve rolar completamente para baixo, pois a lista está na parte inferior. Quando estiver totalmente desativado, oListiew deve começar a rolar.

Da mesma forma, quando o usuário está rolando para cima, primeiro oListView (ordem revertida aqui!) deve rolar para cima, antes doScrollView começa a rolar.

Até agora, fiz o seguinte:

listView.setOnTouchListener(new View.OnTouchListener() {
        // Setting on Touch Listener for handling the touch inside ScrollView
        @Override
        public boolean onTouch(View v, MotionEvent event) {

            // If going up but the list is already at up, return false indicating we did not consume it.
            if(event.getAction() == MotionEvent.ACTION_UP) {
                if (listView.getChildCount() == 0 && listView.getChildAt(0).getTop() == 0) {
                    Log.e("Listview", "At top!");
                    return false;
                }
            }

            // Similar behaviour but when going down check if we are at the bottom.
            if( event.getAction() == MotionEvent.ACTION_DOWN) {
                if (listView.getLastVisiblePosition() == listView.getAdapter().getCount() - 1 &&
                        listView.getChildAt(listView.getChildCount() - 1).getBottom() <= listView.getHeight()) {
                    Log.e("Listview","At bottom!");
                    v.getParent().requestDisallowInterceptTouchEvent(false);
                    return false;
                }
            }
            v.getParent().requestDisallowInterceptTouchEvent(true);
            return false;
        }
    });

Os logs são acionados no momento certo, porém oScrollView não se moverá mesmo que eu retorne falso.

Eu também tentei adicionarv.getParent().requestDisallowInterceptTouchEvent(false); às declarações, mas isso também não funcionou.

Como posso fazer isso funcionar?

questionAnswers(3)

yourAnswerToTheQuestion