我正在尝试创建可折叠日历。
我在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);
}
我试图在calendarView上覆盖onMeasure,使用不同的动画,尝试直接更改ViewPager布局但没有运气。
请帮助我解决这个问题,也许有一个提示。
我的问题与this问题非常相似
答案 0 :(得分: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;
}
}
这是我的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子项,它将正确测量其高度,并测量页面更改时有一点延迟。