Android 使用listview滚动动态更改viewpager和viewpager项目大小
我在viewpager下面有一个listview,在初始状态下,当没有任何内容被滚动时,viewpager只显示一个项目,对下一个和上一个项目进行了10dp预览。我通过设置负页边距实现了这一点:viewpager.setPageMargin-48;。我想做的是,在向下滚动listview时: 1 listview应向上推viewpager,将其高度降低到某一点。当达到viewpager的最小高度时,listview应正常滚动,且其上方有较小尺寸的viewpager 2 viewpager中的下一个和上一个项目应向内拉向中心项目,在最终状态下,viewpager的三个项目应完全显示。下面的图片说明了这一点 向上滚动listview应该做相反的事情 我已经完成了任务的第一部分。这是密码 我的viewpager和listview位于框架布局中,如下所示:Android 使用listview滚动动态更改viewpager和viewpager项目大小,android,listview,android-viewpager,Android,Listview,Android Viewpager,我在viewpager下面有一个listview,在初始状态下,当没有任何内容被滚动时,viewpager只显示一个项目,对下一个和上一个项目进行了10dp预览。我通过设置负页边距实现了这一点:viewpager.setPageMargin-48;。我想做的是,在向下滚动listview时: 1 listview应向上推viewpager,将其高度降低到某一点。当达到viewpager的最小高度时,listview应正常滚动,且其上方有较小尺寸的viewpager 2 viewpager中的下一
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:showIn="@layout/activity_main" tools:context=".MainActivity">
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:dividerHeight="1dp"
android:divider="#000000"
android:scrollbars="none" />
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:background="#FFFFFF"/>
</FrameLayout>
伪\u列表\u头布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
我的任务的第2部分是我陷入困境,没有什么想法,我尝试过用卷轴更改viewpager的pageMargin,但效果不好,也不认为这是实现类似目标的正确方法。通过调用setTranslationX和scroll在寻呼机中设置nextor上一个视图的X位置也不起作用
以下是一些我试图实现的目标:
初始状态没有滚动
达到viewpager的最终状态最小高度
使用viewpager和listview是实现这种功能的正确方法吗?我曾想过使用水平循环视图而不是viewpager,但我需要viewpager的逐页滚动行为来水平滚动/滑动项目。欢迎提出任何建议在主版面中尝试此功能
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:showIn="@layout/activity_main" tools:context=".MainActivity">
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:dividerHeight="1dp"
android:layout_below="@+id/pager"
android:divider="#000000"
android:scrollbars="none" />
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="150dp"
android:clipToPadding="false"
android:background="#FFFFFF"/>
</RelativeLayout>
你能解释一下这是怎么回事吗?您似乎只是在为viewpagerI设置一个高度,我也使用RelativeLayout代表框架布局,并在listview中使用属性android:Layout_below=@+id/pager。但这并不能解决我试图解决的问题
OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView absListView, int i) {
}
@Override
public void onScroll(AbsListView absListView, int i, int i1, int i2) {
if (listview.getFirstVisiblePosition() == 0) {
View firstChild = listview.getChildAt(1); // 0th element is the fake headerview itself
int topY = 0;
if (firstChild != null) {
topY = firstChild.getTop();
FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(
RelativeLayout.LayoutParams.MATCH_PARENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
layoutParams.width = screenWidth;
layoutParams.height = topY;
if (topY < headerHeight && topY >= minHeight) {
// minHeight is the minimum height the viewpager takes, after this point it stops getting smaller
//And vice-versa with headerHeight taking care of the maximum height the viewpager can take
viewpager.setLayoutParams(layoutParams);
}
}
}
}
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:showIn="@layout/activity_main" tools:context=".MainActivity">
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:dividerHeight="1dp"
android:layout_below="@+id/pager"
android:divider="#000000"
android:scrollbars="none" />
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="150dp"
android:clipToPadding="false"
android:background="#FFFFFF"/>
</RelativeLayout>