/**
* ViewPager实现画廊效果
*
* @author Trinea 2013-04-03
*/
public class ViewPagerMulTiFragmentDemo extends FragmentActivity {
private static int TOTAL_COUNT = 10;
private RelativeLayout viewPagerContainer;
private ViewPager viewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager = (ViewPager)findViewById(R.id.view_pager);
viewPagerContainer = (RelativeLayout)findViewById(R.id.pager_layout);
viewPager.setAdapter(new MyPagerAdapter());
// to cache all page, or we will see the right item delayed
viewPager.setOffscreenPageLimit(TOTAL_COUNT);
viewPager.setPageMargin(10);
MyOnPageChangeListener myOnPageChangeListener = new MyOnPageChangeListener();
viewPager.setOnPageChangeListener(myOnPageChangeListener);
viewPagerContainer.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// dispatch the events to the ViewPager, to solve the problem that we can swipe only the middle view.
return viewPager.dispatchTouchEvent(event);
}
});
}
/**
* this is a example fragment, just a imageview, u can replace it with your needs
*
* @author Trinea 2013-04-03
*/
class MyPagerAdapter extends PagerAdapter {
@Override
public int getCount() {
return TOTAL_COUNT;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return (view == object);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
ImageView imageView = new ImageView(ViewPagerMulTiFragmentDemo.this);
imageView.setImageResource(R.drawable.ic_launcher);
((ViewPager)container).addView(imageView, position);
return imageView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
((ViewPager)container).removeView((ImageView)object);
}
}
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) {
}
}
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/pager_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipChildren="false"
android:layerType="software"
tools:context=".MainActivity" >
<android.support.v4.view.ViewPager
android:id="@+id/view_pager"
android:layout_width="80dp"
android:layout_height="200dp"
android:layout_gravity="center"
android:clipChildren="false" />
</RelativeLayout>
发现上面的RelativeLayout(可以用其它layout替换)和ViewPager的android:clipChildren都设置为了false。
android:clipChildren表示是否限制子View在其范围内,在animations动画以及本文的情况下可以发挥很大的作用。默认为true。
(1). ViewPager设置
需要setOnPageChangeListener,在onPageScrolled(int position, float positionOffset, int positionOffsetPixels)函数中不断刷新layout。
还可以
viewPager.setOffscreenPageLimit(TOTAL_COUNT);
viewPager.setPageMargin(getResources().getDimensionPixelSize(R.dimen.page_margin));
setOffscreenPageLimit表示设置缓存,这样左右拖动即可看见后面的Fragment。setPageMargin表示设置Fragment之间的间距
(2)
需要setOnTouchListener函数中将滑动滑动事件传递给viewPager,否则只有viewPager中间的view可以滑动,设置后整个viewPager都可以滑动。
可能运行后出现viewpager的部分Fragment无法看见或是突然消失的问题,请确保RelativeLayout和ViewPager的android:clipChildren都设置为了false并且viewPager.setOffscreenPageLimit(TOTAL_COUNT);其中TOTAL_COUNT大于0. 当然子Fragment本身不能是match_parent的。viewpager设置了paddingTop也会导致无法实现画廊而只是显示一屏。
[转]http://www.trinea.cn/android/viewpager实现画廊一屏多个fragment效果/
分享到:
相关推荐
本示例探讨的是如何利用ViewPager实现一个画廊效果,其中图片在滑动时能够实现放大缩小的效果,以达到类似真实画廊浏览的体验。这个效果在许多应用中都非常常见,比如照片查看器或者产品展示页面。 首先,我们需要...
取而代之的是,开发者开始转向更现代、更灵活的解决方案,比如使用`ViewPager`来实现画廊效果。本篇将详细介绍如何使用`ViewPager`来创建一个流畅、高效的画廊应用。 `ViewPager`是Android Support Library的一部分...
3. **实现画廊效果** - 自定义布局:为每个Page创建一个包含图片的布局,通常使用ImageView控件。可以考虑使用Glide或Picasso等库来加载网络图片。 - 滑动效果:为了达到画廊效果,可能需要自定义PageTransformer...
要实现画廊效果,我们需要做以下几个步骤: 1. **设置依赖**: 首先,在项目级build.gradle文件中添加对Android Support Library的依赖。例如: ```groovy dependencies { implementation 'androidx.viewpager:...
在Android应用开发中,"商品秒杀倒计时功能+ViewPager实现画廊效果"是常见的电商应用中的两个重要特性。这两个功能的结合可以为用户提供更丰富的互动体验,增强购物的吸引力。 首先,我们来深入理解商品秒杀倒计时...
要实现3D画廊效果,我们需要自定义一个PagerAdapter,这个Adapter是ViewPager的扩展,用于填充和管理我们的页面。在自定义Adapter中,我们需要重写`instantiateItem()`和`destroyItem()`方法,分别处理页面的创建和...
本示例代码"ViewPager实现画廊效果"正是利用了这一特性,为用户提供了一个优雅的方式来展示一系列图片。以下是关于ViewPager及其在实现画廊效果中的关键知识点的详细解析。 1. **ViewPager组件**: ViewPager是...
总的来说,使用ViewPager实现3D画廊效果需要深入理解Android的视图绘制机制、矩阵变换以及触摸事件处理。同时,合理的设计和优化能够保证良好的性能和用户体验。通过实践和学习,开发者可以创造出更多富有创意的滑动...
在这个项目中,“AndroidViewPager实现画廊效果ListView Item添加动画集合”显然是为了创建一个包含动态效果的画廊应用,用户可以在`ListView`的每个Item中通过`ViewPager`浏览多个图片,同时每个Item还有相应的动画...
Android系统中使用ViewPager实现画廊效果的应用.pdf
实现“ViewPager的画廊效果(带动画)”主要依赖于Android提供的ViewPager组件。ViewPager是一个强大的视图容器,它允许用户在水平方向上滑动浏览页面,通常用于实现滑动页面的效果。与已废弃的Gallery组件相比,...
在这个“Android照片墙加强版”项目中,开发者利用ViewPager组件实现了类似画廊的效果,使用户可以方便地左右滑动查看图片,提升用户体验。以下是对这个Demo的详细解析: 首先,ViewPager是Android SDK中的一个强大...
总结一下,要实现“ViewPager画廊效果”,你需要: 1. 添加`ViewPager`到布局文件。 2. 创建`PagerAdapter`并设置给`ViewPager`。 3. 实现自定义的`PageTransformer`接口,以控制滑动动画。 4. 在`ViewPager`上调用`...
在本案例中,我们将学习如何使用`ViewPager`和自定义的页面变换器来实现画廊效果。 1. **自定义页面变换器(ZoomOutPageTransformer)**: `ViewPager`提供了`PageTransformer`接口,我们可以自定义这个接口的实现来...
Android ViewPager 画廊效果 从上面的图片可以看到,当添加多张图片的时候,能够在下方形成一个画廊的效果,我们左右拉动图片来看我们添加进去的图片,效果是不是好了很多呢?下面来看看怎么实现吧! 上面的效果...
在本教程中,我们将深入探讨如何利用ViewPager实现一个类似画廊(Gallery)的效果,并且让其能够无限循环滚动。 首先,我们要了解ViewPager的基本用法。ViewPager是Android Support Library的一部分,它允许用户在...
最近项目里有用到ViewPager来做广告运营位展示,看到现在很多APP的广告运营位都是无限循环的,所以就研究了一下这个功能的实现。 先看看效果 从一个方向上一直滑动,么有滑到尽头的感觉,具体是怎么实现的呢?看...
总结来说,通过自定义ViewPager并利用滑动事件和视图动画,我们可以实现一个高性能、用户体验良好的可滑动放大缩小画廊效果。这种方式不仅提高了性能,还允许开发者灵活地定制画廊的行为和样式,以满足各种应用设计...