一屏显示多个ViewPager的子item(中间显示完全,左右显示部分)

ViewPager多Item显示
本文介绍如何使用ViewPager在一屏内显示多个子项,并通过设置android:clipChildren=false解除子视图显示范围限制,实现更好的视觉效果。文章还提供了设置PageMargin及OffscreenPageLimit的方法。

这个就不上效果图了,大家应该都能想到样子。我之后的博客会用到这种效果,想看效果的朋友可以去看一下。

直接上代码:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:clipChildren="false">

        <TextView
            android:id="@+id/tv_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_gravity="center_horizontal"
            android:text="显示多个item"
            android:paddingTop="60dp"
            android:paddingBottom="45dp"
            android:textColor="#fff"
            android:textSize="18sp"/>

        <android.support.v4.view.ViewPager
            android:layout_below="@+id/tv_title"
            android:id="@+id/vp_pager"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="45dp"
            android:layout_marginRight="45dp"
            android:layout_marginBottom="30dp"
            android:clipChildren="false"/>
    </RelativeLayout>
  • 重点就是
android:clipChildren="false"

这个属性默认是true,作用就是限制子view在父View范围内显示。
注意RelativeLayout和ViewPager都要设置,否则没有效果。

在Activity中设置一下

mViewPager.setPageMargin(getResources().getDimensionPixelSize(R.dimen.page_margin));

mViewPager.setOffscreenPageLimit(3);

这样基本上就可以了,感觉效果不好的,可以自己再调整一下。

下一篇博客是关于ViewPager在一屏显示多个子item后的滑动效果的,欢迎大家结合着看。

### 实现思路 要在 Android 中使用 `ViewPager` 实现中间大两边小的画廊效果,并带有指示器,需要结合多个组件和自定义逻辑来完成。 #### 1. 使用 `ViewPager` 做轮播图 `ViewPager` 是实现滑动视图的基础控件。可以通过适配器将图片加载到 `ViewPager` 的每个页面中,然后通过设置页面变换器(`PageTransformer`)来实现中间大两边小的效果。 ```java viewPager.setPageTransformer(true, new ViewPager.PageTransformer() { @Override public void transformPage(@NonNull View page, float position) { // 自定义页面缩放动画 if (position < -1 || position > 1) { page.setScaleX(0.8f); page.setScaleY(0.8f); } else if (position <= 1) { float scale = Math.max(0.8f, 1 - Math.abs(position) * 0.2f); page.setScaleX(scale); page.setScaleY(scale); } } }); ``` 此代码片段会根据当前页面的位置对相邻页面进行缩放,从而形成中间大、两侧逐渐变小的视觉效果[^1]。 #### 2. 添加指示器 可以使用第三方库 `ViewPagerIndicator` 来实现分离式的指示器。在布局文件中添加如下内容: ```xml <com.viewpagerindicator.CirclePageIndicator android:id="@+id/indicator" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="10dp" app:fillColor="#FF888888" app:pageColor="#888888" app:radius="4dp" /> ``` 在 Java/Kotlin 文件中绑定 `ViewPager` 和指示器: ```java CirclePageIndicator indicator = findViewById(R.id.indicator); indicator.setViewPager(viewPager); ``` 这将自动同步 `ViewPager` 的滑动状态与指示器的状态,显示当前页码位置[^1]。 #### 3. 图片加载优化 为了提高性能并减少内存占用,建议使用 Glide 或 Picasso 等图片加载框架动态加载图片资源。例如: ```java Glide.with(context) .load(imageUrl) .into(imageView); ``` 这样可以确保图片高效加载,并且支持缓存机制,避免重复加载相同图片导致卡顿问题[^2]。 #### 4. 数据源处理 通常轮播图数据来自网络请求获取的图片列表,因此需要先解析 JSON 数据,提取出图片地址数组。随后将其传递给 `PagerAdapter`,由适配器负责创建每页的内容。 ```java List<String> imageUrls = parseJsonResponse(response); PagerAdapter adapter = new ImagePagerAdapter(imageUrls); viewPager.setAdapter(adapter); ``` #### 5. 自动轮播功能 如果希望实现自动播放效果,则可以通过定时任务定期调用 `setCurrentItem()` 方法切换当前显示页面: ```java new Handler().postDelayed(new Runnable() { @Override public void run() { int currentItem = viewPager.getCurrentItem(); int nextItem = (currentItem + 1) % adapter.getCount(); viewPager.setCurrentItem(nextItem, true); handler.postDelayed(this, 3000); // 每隔三秒切换次 } }, 3000); ``` 这段代码会在每次执行时更新当前页面索引,并触发平滑滚动动画过渡到下个页面,达到循环播放的目的。 --- ###
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值