具有可扩展子项的ViewPager



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

我在ViewPager中使用自定义日历视图,所以当按下展开/折叠按钮时,我的日历视图会动画折叠除一周外的所有日历周。

目标是在展开时滑动月份(这是我想要的),在折叠时滑动周。

下面的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);
}

我试图在calendarView上覆盖onMeasure,使用了不同的动画,试图直接更改ViewPager布局,但没有成功。

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

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

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

所以我终于找到了解决问题的方法,也许这会很有帮助。

这是我的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;
    }
}

这是我的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);
    }
}

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

相关内容

  • 没有找到相关文章

最新更新