Android 使用listview滚动动态更改viewpager和viewpager项目大小

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中的下一

我在viewpager下面有一个listview,在初始状态下,当没有任何内容被滚动时,viewpager只显示一个项目,对下一个和上一个项目进行了10dp预览。我通过设置负页边距实现了这一点:viewpager.setPageMargin-48;。我想做的是,在向下滚动listview时:

1 listview应向上推viewpager,将其高度降低到某一点。当达到viewpager的最小高度时,listview应正常滚动,且其上方有较小尺寸的viewpager

2 viewpager中的下一个和上一个项目应向内拉向中心项目,在最终状态下,viewpager的三个项目应完全显示。下面的图片说明了这一点

向上滚动listview应该做相反的事情

我已经完成了任务的第一部分。这是密码

我的viewpager和listview位于框架布局中,如下所示:

<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>