这个画廊的效果利用到了View的clipChildren属性,我们在这里要把ViewPager以及它的父窗体都设置为false,如下:

Android:clipChildren=”false”

因为如果clipChildren属性设置为true,就表明我们要将children给clip掉,就是说对于子元素来说,超出当前view的部分都会被切掉,那我们在这里把它设置成false,就表明超出view的部分,不要切掉,依然显示。

xml代码部分:

<LinearLayout
android:id=”@+id/container”
android:layout_width=”match_parent”
android:layout_height=”100dp”
android:clipChildren=”false”
android:gravity=”center_horizontal”
android:layerType=”software”
android:orientation=”horizontal” >

<android.support.v4.view.ViewPager
android:id=”@+id/viewpager”
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:layout_marginLeft=”110dp”
android:layout_marginRight=”110dp”
android:clipChildren=”false” >
</android.support.v4.view.ViewPager>

Java代码部分:

// 1.设置幕后item的缓存数目
mViewPager.setOffscreenPageLimit(3);
// 2.设置页与页之间的间距
mViewPager.setPageMargin(10);
// 3.将父类的touch事件分发至viewPgaer,否则只能滑动中间的一个view对象
container.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return mViewPager.dispatchTouchEvent(event);
}
});

参考效果图(上面代码并不能实现效果图,仅供参考):

 

 

正常情况下, ViewPager  一页只能显示一项数据,
但是如果需求是,  除了小显示本页数据, 还有包 左右两半的数据 也都露出一点来呢?
这该怎么处理?
后面在网上了搜了一下, 发现有不少这样得到文章, 这里自己也写一篇总结一下.
其实 主要就是用到 View 的 android:clipChildren 属性.
简单来说这个属性,  就是 父View 是否 束缚 子View 的显示范围.
如果 父View  有 padding , 那么 子View 则在 padding区域是不能显示内容的,
但是如果 设置 android:clipChildren 为 false 时, 则子View 就可以在 父View 的padding屈戌显示内容了.
ok 基本了解了 android:clipChildren  那么来处理一下  ViewPager吧

先看一下我做的demo:

基本就是上面那样, 除了可以显示 当先项的内容, 还可以显示 左右两边的内容.
下面贴一下主要代码:
布局文件:
    **[html]** [view plain](http://blog.csdn.net/chen930724/article/details/50464069#)<span data-mod="popu_168"> [copy](http://blog.csdn.net/chen930724/article/details/50464069#)</span>
  

  
  <div>
    <embed id="ZeroClipboardMovie_1" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" type="application/x-shockwave-flash" width="18" height="18" align="middle" name="ZeroClipboardMovie_1" data-mce-fragment="1">
    </embed>
  </div>
</div>
- <span class="tag"><?</span><span class="tag-name">xml</span> <span class="attribute">version</span>=<span class="attribute-value">&#8220;1.0&#8221;</span> <span class="attribute">encoding</span>=<span class="attribute-value">&#8220;utf-8&#8221;</span><span class="tag">?></span>

- <span class="tag"><</span><span class="tag-name">RelativeLayout</span>

- <span class="attribute">android:id</span>=<span class="attribute-value">&#8220;@+id/view_pager_box&#8221;</span>

- <span class="attribute">xmlns:android</span>=<span class="attribute-value">&#8220;http://schemas.android.com/apk/res/android&#8221;</span>

- <span class="attribute">android:layout_width</span>=<span class="attribute-value">&#8220;match_parent&#8221;</span>

- <span class="attribute">android:layout_height</span>=<span class="attribute-value">&#8220;360dp&#8221;</span>

- <span class="attribute">android:layout_marginTop</span>=<span class="attribute-value">&#8220;30dp&#8221;</span>

- <span class="attribute">android:clipChildren</span>=<span class="attribute-value">&#8220;false&#8221;</span>

- <span class="tag">></span>

- 
- <span class="tag"><</span><span class="tag-name">android.support.v4.view.ViewPager</span>

- <span class="attribute">android:id</span>=<span class="attribute-value">&#8220;@+id/view_pager&#8221;</span>

- <span class="attribute">android:layout_width</span>=<span class="attribute-value">&#8220;match_parent&#8221;</span>

- <span class="attribute">android:layout_height</span>=<span class="attribute-value">&#8220;match_parent&#8221;</span>

- <span class="attribute">android:layout_marginLeft</span>=<span class="attribute-value">&#8220;50dp&#8221;</span>

- <span class="attribute">android:layout_marginRight</span>=<span class="attribute-value">&#8220;50dp&#8221;</span>

- <span class="attribute">android:clipChildren</span>=<span class="attribute-value">&#8220;false&#8221;</span>

- 
- <span class="tag">/></span>

- 
- <span class="tag"></</span><span class="tag-name">RelativeLayout</span><span class="tag">></span>

 

可以在看到
外层的 RelativeLayout 设置了android:clipChildren 为false
ViewPager 同样页设置了 android:clipChildren 为false
需要两个都设置, 不然会出问题
activity 相关代码
    **[java]** [view plain](http://blog.csdn.net/chen930724/article/details/50464069#)<span data-mod="popu_168"> [copy](http://blog.csdn.net/chen930724/article/details/50464069#)</span>
  

  
  <div>
    <embed id="ZeroClipboardMovie_2" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" type="application/x-shockwave-flash" width="18" height="18" align="middle" name="ZeroClipboardMovie_2" data-mce-fragment="1">
    </embed>
  </div>
</div>
- <span class="keyword">public</span> <span class="keyword">class</span> MainActivity <span class="keyword">extends</span> AppCompatActivity {

- 
- ViewPager mViewPager;

- RelativeLayout mViewPagerBox;

- 
- <span class="keyword">private</span> ViewPagerAdapter1 mViewPagerAdapter1;

- 
- <span class="annotation">@Override</span>

- <span class="keyword">protected</span> <span class="keyword">void</span> onCreate(Bundle savedInstanceState) {

- <span class="keyword">super</span>.onCreate(savedInstanceState);

- setContentView(R.layout.activity_main);

- 
- mViewPager = (ViewPager) findViewById(R.id.view_pager);

- mViewPagerBox = (RelativeLayout) findViewById(R.id.view_pager_box);

- 
- mViewPager.setOffscreenPageLimit(<span class="number">3</span>);

- 
- mViewPagerAdapter1 = <span class="keyword">new</span> ViewPagerAdapter1(<span class="keyword">this</span>);

- mViewPager.setAdapter(mViewPagerAdapter1);

- 
- mViewPagerBox.setOnTouchListener(<span class="keyword">new</span> View.OnTouchListener() {

- <span class="annotation">@Override</span>

- <span class="keyword">public</span> <span class="keyword">boolean</span> onTouch(View v, MotionEvent event) {

- <span class="keyword">return</span> mViewPager.dispatchTouchEvent(event);

- }

- });

- 
- }

- }

 

可以看到 和使用普通的 Viewpager 没有任何的区别,
需要注意的是, 为了能够滑动 左右漏出的两边时,  也能滑动 ViewPager
需要吧 Viewpager 的 父View收到的事件 传递给 viewpager
我们在使用Viewpager 的时候, 经常 会加入一些好看的滑动效果这个是怎么实现的呢?
其实很简单,  google 以及为我提供了相应的方法.
通过 setPageTransformer 就可以设置 Viewpager的滑动效果.
Android 官方文档 已经提供了两种 滑动效果:
[http://developer.android.com/intl/zh-cn/training/animation/screen-slide.html](http://developer.android.com/intl/zh-cn/training/animation/screen-slide.html)
ZoomOutPageTransformer:





![](http://img.blog.csdn.net/20160106001346888)