Viewpager内滚动视图
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Viewpager内滚动视图相关的知识,希望对你有一定的参考价值。
我有一个ViewPager
里面一个ScrollView
以及其他成分。当我给一个高度ViewPager
到XML
那么ScrollView
工作正常,但我不能给高度ScrollView
作为ViewPager
应根据页面高度扩张。我实现了一个可运行的,这将扩大在运行时ViewPager
。
问题是我不能滚动,其持有的ScrollView
外ViewPager
XML =======
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:src="@drawable/img1"
android:scaleType="fitXY"
android:layout_width="match_parent"
android:layout_height="150dp"
android:id="@+id/img_1"
/>
<ViewPager
android:layout_width="match_parent"
android:layout_height="wrap_content">
</ViewPager>
</ScrollView>
JAVA动态设置为viewpager高度
viewpager.post(new Runnable() {
@Override
public void run() {
ViewGroup.LayoutParams lp = viewpager.getLayoutParams();
lp.height = viewpager.getChildAt(viewpager.getCurrentItem()).getHeight();
viewpager.setLayoutParams(lp);
}
});
我想你必须删除你的Java代码。但添加此属性,您的滚动型的xml:
android:fillViewport="true"
这个问题是在这里找到答案:Dynamic height viewpager。
无论如何,我想给你,你需要解决它的代码:
public class CustomPager extends ViewPager {
private View mCurrentView;
public CustomPager(Context context) {
super(context);
}
public CustomPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
if (mCurrentView == null) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
return;
}
int height = 0;
mCurrentView.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
int h = mCurrentView.getMeasuredHeight();
if (h > height) height = h;
heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
public void measureCurrentView(View currentView) {
mCurrentView = currentView;
requestLayout();
}
public int measureFragment(View view) {
if (view == null)
return 0;
view.measure(0, 0);
return view.getMeasuredHeight();
}
}
像老板的回答说:
ViewPager需要在每个页面被改变时重新测量。好的地方做,这是PagerAdapter的setPrimaryItem功能
public class MyPagerAdapter extends FragmentPagerAdapter {
private List<Fragment> fragments;
private int mCurrentPosition = -1;
public MyPagerAdapter(FragmentManager fm) {
super(fm);
this.fragments = new ArrayList<Fragment>();
fragments.add(new FirstFragment());
fragments.add(new SecondFragment());
fragments.add(new ThirdFragment());
fragments.add(new FourthFragment());
}
@Override
public void setPrimaryItem(ViewGroup container, int position, Object object) {
super.setPrimaryItem(container, position, object);
if (position != mCurrentPosition) {
Fragment fragment = (Fragment) object;
CustomPager pager = (CustomPager) container;
if (fragment != null && fragment.getView() != null) {
mCurrentPosition = position;
pager.measureCurrentView(fragment.getView());
}
}
}
@Override
public Fragment getItem(int position) {
return fragments.get(position);
}
@Override
public int getCount() {
return fragments.size();
}
}
你可以找到所有代码here
我找到很好的解决办法here
无论如何,这是文章的代码:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
try {
int currentPagePosition=0;
View child = getChildAt(currentPagePosition);
if (child != null) {
child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
int h = child.getMeasuredHeight();
heightMeasureSpec = MeasureSpec.makeMeasureSpec(h, MeasureSpec.EXACTLY);
}
} catch (Exception e) {
e.printStackTrace();
}
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
您需要创建自己的自定义视图寻呼机从ViewPager延伸和覆盖onMeasure方法
以上是关于Viewpager内滚动视图的主要内容,如果未能解决你的问题,请参考以下文章
ViewPager 中片段内的 ScrollView 内的 HorizontalListView
Android使用片段在viewpager中的页面滚动上放置动画
ViewPager中的视图在ScrollView中不能垂直滚动
在 CoordinatorLayout Android 中的 ViewPager 片段中使用 NestedScrollView 突然滚动