ViewPager与可扩展的孩子

Jon*_*nez 5 height android expandable android-viewpager

我正在尝试创建可折叠日历.

我在ViewPager中使用自定义calendarView,因此当按下展开/折叠按钮时,我的calendarView动画会折叠所有日历周,只有一个.

目标是在展开时滑动月份(按我想要的方式工作)并在折叠时滑动几周.

CalendarView下面是ListView的一些事件,当用户崩溃日历时 - listView的高度必须改变.

问题是当我试图在ViewPager中折叠calendarView时,他不会改变高度.

calendarView是一个带有子视图的LinearLayout,当它不在ViewPager中时,它会动画和更改大小.

我正在使用小片段为其设置ViewPager高度

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

    int height = 0;
    for(int i = 0; i < getChildCount(); i++) {
        View child = getChildAt(i);
        child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
        int h = child.getMeasuredHeight();
        if(h > height) height = h;
    }

    heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);

    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
Run Code Online (Sandbox Code Playgroud)

我试图在calendarView上覆盖onMeasure,使用不同的动画,试图直接更改ViewPager布局但没有运气.

请帮助我解决这个问题,也许有一个提示.

我发现了这个,这个,这个以及更多的问题

我的问题与这个问题非常相似

Jon*_*nez 7

所以最后我想出了如何解决我的问题,也许它会有所帮助.

这是我的PagerAdapter:

class CustomAdapter extends PagerAdapter {

    private View mCurrentView;

    ...

    // Saving current active item
    @Override
    public void setPrimaryItem(ViewGroup container, int position, Object object) {
        mCurrentView = (View) object;
    }

     public View getCurrentItem() {
        return mCurrentView;
    }

}
Run Code Online (Sandbox Code Playgroud)

这是我的ViewPager类

class CustomViewPager extends ViewPager {

    private CustomViewPagerAdapter mAdapter;

    ...

    // Set ViewPager height to currentItem
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

        int height = 0;
        View v = mAdapter.getCurrentItem();
        if(v != null) {
            v.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
            height = v.getMeasuredHeight();
        }

        heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);

        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }
}
Run Code Online (Sandbox Code Playgroud)

有了这个,我可以折叠/扩展ViewPager子项,它将正确测量其高度,并测量页面何时更改一点延迟.