Scroll to a specific view in scroll view

前端 未结 15 1477
醉梦人生
醉梦人生 2020-12-04 14:08

I have added a scrollview and the subchilds inside the scrollview. At some point i need to scroll to a specific view.



1. 

        
15条回答
  •  醉酒成梦
    2020-12-04 14:46

    If child that we need to scroll to is not a direct child then above solutions don't work

    I have used below solution in my project, sharing it may be helpful to others

    /**
     * Used to scroll to the given view.
     *
     * @param scrollViewParent Parent ScrollView
     * @param view View to which we need to scroll.
     */
    private void scrollToView(final ScrollView scrollViewParent, final View view) {
        // Get deepChild Offset
        Point childOffset = new Point();
        getDeepChildOffset(scrollViewParent, view.getParent(), view, childOffset);
        // Scroll to child.
        scrollViewParent.smoothScrollTo(0, childOffset.y);
    }
    
    /**
     * Used to get deep child offset.
     * 

    * 1. We need to scroll to child in scrollview, but the child may not the direct child to scrollview. * 2. So to get correct child position to scroll, we need to iterate through all of its parent views till the main parent. * * @param mainParent Main Top parent. * @param parent Parent. * @param child Child. * @param accumulatedOffset Accumulated Offset. */ private void getDeepChildOffset(final ViewGroup mainParent, final ViewParent parent, final View child, final Point accumulatedOffset) { ViewGroup parentGroup = (ViewGroup) parent; accumulatedOffset.x += child.getLeft(); accumulatedOffset.y += child.getTop(); if (parentGroup.equals(mainParent)) { return; } getDeepChildOffset(mainParent, parentGroup.getParent(), parentGroup, accumulatedOffset); }

提交回复
热议问题