Samsung Galaxy S2 2.3.5+ not calling overScrollBy()

*爱你&永不变心* 提交于 2019-12-03 13:01:05

I just faced the same problem and finally came up with the following custom overscroll detection:

    listView.setOnTouchListener(new OnTouchListener() {

        private static final float OVERSCROLL_THRESHOLD_IN_PIXELS = 70;

        private float downY;

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            int firstVisibleItem = listView.getFirstVisiblePosition();
            int totalItemCount = listView.getCount();
            int visibleItemCount = listView.getChildCount();
            boolean onTop = firstVisibleItem == 0 && listView.getChildAt(0) != null && listView.getChildAt(0).getTop() == 0;
            boolean onBottom = firstVisibleItem + visibleItemCount == totalItemCount && listView.getChildAt(visibleItemCount-1).getBottom() == listView.getHeight();

            if(onTop || onBottom) {
                switch(event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    downY = event.getY();
                    break;
                case MotionEvent.ACTION_MOVE:
                    float deltaY = event.getY() - downY;
                    if(onTop && deltaY > OVERSCROLL_THRESHOLD_IN_PIXELS) {
                        // Top overscroll
                    }
                    if(onBottom && -deltaY > OVERSCROLL_THRESHOLD_IN_PIXELS) {
                        // Bottom overscroll
                    }
                    break;
                }
            }

            return false;
        }
    });

Problem solved, I have created my own OverScrollView, you are welcome to use it. https://github.com/EverythingMe/OverScrollView

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!