2015-11-06 67 views
0

我在下面viewpager并在初始状态(当什么也没有滚动)一个listview,该viewpager显示下一个和以前的10dp“预览”只有一个项目项目(我已通过设置负页边距达到此目的:viewPager.setPageMargin(-48);)。我正在试图做的是,在向下滚动listview变化viewpager和viewpager项目与列表视图滚动动态尺寸

1)listview应该“推”viewpager,将其高度降低到某个点。在达到这一点时(一些minHeight的viewpager),listview应该正常滚动与上面的较小尺寸viewpager

2)下,并在viewpager根据前述项目应该拉内(向中央项目),并在最终状态,项目viewpager应得到充分展示。 (下面的图片来说明这一点)

滚动列表视图应该做相反的事情。

我设法完成了我的任务的第(1)部分。下面的代码

viewpagerlistviewFrameLayout像这里面:

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

我“假”的listviewviewpager下方加入了transaprent头欣赏到listview和制造的高度headeviewviewpager相同。这里的代码片段:

screenWidth = // Screen width of the phone 
headerHeight = // Required height of the viewpager and the headerview 

headerView = inflater.inflate(R.layout.fake_list_header, listView, false); 
headerView.getLayoutParams().height = headerHeight; 
headerView.getLayoutParams().width = screenWidth; 
viewPager.getLayoutParams().height = headerHeight; 
viewPager.getLayoutParams().width = screenWidth; 
viewPager.setPageMargin(negativeMargin); 
listView.addHeaderView(headerView, null, false); 

// Other initializations and stuff 

fake_list_header布局文件:

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

最后,我listviewOnScrollListener这需要调整viewpager高度依赖于由listview和停止滚动量的护理当我们达到viewpager的最小高度时:

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);       
        } 
       } 


      } 

     } 
    } 

我的任务的第(2)部分是我被卡住的地方(并且用完了想法),我试图用改变pageMargin,但结果不好(也不认为这是正确的方法来实现这样的事情)。通过滚动调用setTranslationX来设置寻呼机中下一个(或前一个)视图的X位置也不起作用。

这里是什么,我想实现一些嘲笑:

初始状态(没有滚动)

enter image description here

最终状态(实现viewpager的了minHeight)

enter image description here

正在使用viewpagerlistview达到这样的目标吗?我想使用水平recyclerview而不是viewpager,但我需要“逐页”滚动行为的viewpager水平滚动/滑动的项目。任何建议表示欢迎

回答

0

在主布局试试这个

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

你能解释一下这是如何工作的?你似乎正在设置一个高度viewpager –

+0

我也采取RelativeLayout代表框架布局,并在列表视图中使用属性android:layout_below =“@ + id/pager”。 –

+0

但这并不能解决我试图解决的问题 –