笔记123--viewpager一页显示多个item

来源:互联网 发布:对网络语言的看法800字 编辑:程序博客网 时间:2024/05/23 17:28

1、效果图


B:表示viewpager

A:表示viewpager的父布局

B和B之间的红线:表示viewpager两个item之间的间距。


2、原理

B距离其父布局左右都有间隔,然后让B的item不局限于其内部,即能存在于B的布局之外。同样,A也要允许B不局限于A内部(clipChildren属性)。然后,设置viewpager两个item之间的距离即可(setPageMargin)。最后不要忘记在viewpager滑动后更新A界面。

3、实践

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:id="@+id/viewPagerContainer"    android:layout_height="match_parent"    android:background="#EEEEEE"    android:clipChildren="false"    android:orientation="vertical" >    <android.support.v4.view.ViewPager        android:id="@+id/viewpage"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:layout_marginLeft="80dp"        android:layout_marginRight="80dp"        android:clipChildren="false" /></LinearLayout>

<span style="white-space:pre"></span>pager.setOnPageChangeListener(new MyOnPageChangeListener());<span style="white-space:pre"></span>// pageCount设置红缓存的页面数   pager.setOffscreenPageLimit(3);  // 设置2张图之前的间距。  pager.setPageMargin(20);public class MyOnPageChangeListener implements OnPageChangeListener {         @Override        public void onPageSelected(int position) {        }         @Override        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {            // to refresh frameLayout            if (viewPagerContainer != null) {                viewPagerContainer.invalidate();            }        }         @Override        public void onPageScrollStateChanged(int arg0) {        }    }

4、特例viewpager + fragment

setPageMargin必须是一个负数,才能实现两个item之间的间隔,否则两个item会重合~~~去实践吧,骚年。

5、注意事项

1.FragmentPagerAdapter和FragmentStaticPagerAdapter区别:第一个不会销毁fragment本身,只会销毁其视图。对于需要保存数据的很有用。

2.不要在Fragment中定义getView()来获取对应的视图,getView是其默认的方法,换一个名称吧(如:getFragView)。

3.要想动态更改fragment的视图,那你必须等到viewpager.setAdapter之后~否则无效果,因为fragment还未创建~~

4.讲解一个布局吧

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="200dp"    android:background="#000000"    android:orientation="vertical" >    <ScrollView        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_gravity="center_horizontal"         android:background="#ffffff">        <LinearLayout            android:id="@+id/ll"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_gravity="center_horizontal"            android:orientation="vertical" >            <TextView                android:id="@+id/question"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:text="问题描述" />        </LinearLayout>    </ScrollView></LinearLayout>
这个布局在activity中使用时,是完全没有问题的~

但是当这个布局在fragment中使用,切该fragment要作为viewpager的item时,悲剧就出现了,不管你怎么定义最外层布局的大小,他始终显示的是Scrollview中实际布局大小~如何解决这个问题?只要在Scrollview布局的同一级再定义一个布局即可~

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="200dp"    android:background="#000000"    android:orientation="vertical" >    <TextView        android:id="@+id/tv_type"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="多选题" />    <ScrollView        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_gravity="center_horizontal"        android:background="#ffffff" >        <LinearLayout            android:id="@+id/ll"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_gravity="center_horizontal"            android:orientation="vertical" >            <TextView                android:id="@+id/question"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:text="问题描述" />        </LinearLayout>    </ScrollView></LinearLayout>

0 5
原创粉丝点击