Android导航栏高斯模糊,ViewPagerHelper: 这个一个 viewpager 工具类,能够帮你快速实现导航栏轮播图,app引导页,viewpager + fragment;内置多种ta...

你是否有遇到这样的问题,每次开发一个新的项目,在 viewpager 这一块上,总是在做重复的东西,比如app引导页,轮播图,

viewpager+fragment 的 tab 指示器等等,这些虽然简单,但却是每个app都要的,而且很耗时,有没有每次在写这个,都很无语的感觉呢?

基于这个,ViewPagerHleper 就诞生了,它可以快速帮你搞定 banner 轮播图,实现高级定制化,内置多种指示器,满足你的日常需求,妈妈再也不用担心我不会复制粘贴了。

ViewPagerHelper.svg

ViewPagerHelper.svg

ViewPagerHelper.svg

%E4%BD%9C%E8%80%85-%E9%83%91%E5%B0%91%E9%94%90-green.svg

注意注意注意!!!

提问题的时候,请遵循以下标准

现象: 操作步骤,应用场景

对应代码: 贴图或者贴代码

机型或版本: 可选

后面对描述不清的问题,不予理会,精力有限,感谢理解

使用

这里用的是 jitpack 这个网站,所以:

allprojects {

repositories {

...

maven { url 'https://jitpack.io' }

}

}

然后在你的 module 中添加:

implementation 'com.github.LillteZheng:ViewPagerHelper:v2.7'

如果要在 AndroidX 中使用,确保你的工程有以下代码,就可以了,不影响使用:

android.useAndroidX=true

# Automatically convert third-party libraries to use AndroidX

android.enableJetifier=true

v2.0 之后与之前的工程变动较大,建议更新到最新版,支持更多效果和修复不少bug

效果图

首先,大家最常用到的就是轮播图了,这里给大家提供了 常用的 Indicator

轮播图

文字效果

扇形效果

loop_text.gif

0e4a3333f128edc6e410705f3321c836.gif

CircleIndicator

RectIndicator

circleindicator.gif

rectindicator.gif

图片放大效果

卡片效果

scale.gif

7f1d14b7f32b7558f61354bd7c35bbfb.gif

跟多说明请参考 轮播使用说明

Tab指示器

TabIndicator 已经不再维护;推荐大家使用新库:https://github.com/LillteZheng/FlowHelper

支持更多效果,功能更强大,且支持自己自定义

三角形版本

条形状版本

文字颜色渐变方式,加了滚动效果

tri.gif

rect2.gif

color.gif

没有结合ViewPager

结合ViewPager

tab_click.gif

tab_viewpager.gif

弧形图片,支持高斯模糊

弧形图片

arc.png

版本说明

v2.7

处理设置 setCurrentPosition 的问题

v2.6

处理刷新时,indicator 成倍增加,以及动画和位置不是从头再来的问题

v2.1

大改动,去掉了之前很多无用代码和逻辑

Indicator 效果全部统一到了 CircleIndicator 和 RectIndicator,其他的去掉

BannerViewPager 增加 setCurrentPosition(int page) 默认选中第几页方法

BannerViewPager 修复和 Recyclerview 结合,移除窗口后回来,滚动失败的问题

v1.9

处理TabIndicator第一次没加载数据报错和优化部分代码

v1.8

修改ArcImageView

增加缩放因子

增加缩放中心点坐标

v1.7

修改ArcImageView

arcHeight 支持负数,凹进去,方便在user界面使用

增加高斯模糊,arc_blur ,对应参数0到25

支持使用背景色,采用arc_use_color

v1.6

ArcImageView 去掉scaleType中的 matrix 属性

v1.5

修改了BannerViewpager 的一些自定说明,避免歧义,小伙伴记得更新呀

自定义控件,全部增加动态设置参数接口,写得好累啊

BannerViewpager 增加了卡片式布局的效果

优化Readme说明

其他版本

v1.4 --> 添加ScaleImageView可缩放控件,可支持在viewpager等滑动控件中使用

v1.3 --> TabIndicator 支持滚动,app:tab_iscanscroll 默认true滚动,可设置不滚动

v0.9 --> 处理第一次轮播图 index 不对问题,优化代码

v0.8 --> 退出时自动关轮播,isOutVisiableWindow()方法,用于有滚动时,判断是否停止轮播

v0.5 --> 增加 banner_loop_max_count 变量,当数据大于这个数值时,才会填充多个数据和轮播

v0.4 --> 解决app引导页,快速滑动时,“立即体验”按钮会不显示问题,并修改自定义属性,防止干扰

v0.3 --> 从lib中移除glide的依赖,防止干扰其他项目,去掉和优化一些代码,谢谢各位的提醒

v0.2 --> 修复TabIndicator的宽度,不是 match_parent时,通过SetTabData添加数据,却显示不全的问题

v0.1 --> 发布稳定版

如果该项目对您有帮助,赞赏一下吧 ^_^

下面可以看一下自定义的属性,方便大家在用的时候调用:

一些自定义属性:

BannerViewPager

名称

类型

说明

banner_isAutoLoop

boolean

是否自动轮播

banner_looptime

integer

轮播的时间

banner_switchtime

integer

viewpager的切换速度

banner_loop_max_count

integer

超过这个数字时,才会轮播效果

banner_card_height

integer,dimension

卡片的高度

banner_iscycle

boolean

是否循环

banner_transformer

card,mz,zoom,depath

transformer的效果

CircleIndicator

名称

类型

说明

cir_type

integer

效果,支持3中,normal、cirToRect、scale

cir_normalColor

color

默认的颜色

cir_selectedColor

color

选中时的颜色

cir_horizon_margin

dimension

两个小圆球的距离

cir_size

dimension

小球的大小

cir_rect_width

dimension

当type为 cirToRect时,矩形的宽度

cir_scale_factor

float

当type 为scale,放大倍数

cir_canMove

boolean

是否可移动,默认支持移动

RectIndicator

名称

类型

说明

|rect_normalColor|color|默认的颜色|

|rect_selectedColor|color|选中时的颜色|

|rect_horizon_margin|dimension|两个矩形的距离|

|rect_width|dimension|矩形的宽度|

|rect_height|dimension|矩形的高度|

|rect_round_size|dimension|矩形的圆角|

|rect_canMove|boolean|是否可移动,默认支持移动|

TextIndicator

其实就是一个 textview ,自己配置大小颜色和背景即可

弧形图片 ArcImageView

名称

类型

说明

arc_height

dimension

弧度的高度

arc_blur

integer

图片的模糊度,0到25

arc_use_color

color,reference

是否使用背景色

arc_scaleX

dimension

缩放中心点X方向

arc_scaleY

dimension

缩放中心点Y方向

arc_scaleFactor

float

缩放比例

arc_auto_fix

boolean

自动适配大小,如果用glide,可以忽略,默认为true

顶部viewpager指示器 TabIndicator

名称

类型

说明

visiabel_size

integer

可视化个数,比如有一排,我们就只要显示4个

tab_color

color,reference

指示器的颜色

tab_show

boolean

是否显示指示器

tab_text_type

normaltext,colortext

顶部文字的类型,nromaltext为普通的textview,corlortext为文件渐变

tab_width

dimension

指示器的宽度

tab_height

dimension

指示器的高度

tab_textsize

dimension

顶部文字的大小

tab_text_default_color

color,reference

顶部文字默认的颜色

tab_text_change_color

color,reference

移动时,顶部文字的颜色

tap_type

tri,rect

指示器类型,有三角形或者圆条

tab_iscanscroll

boolean

指示器是否支持滚动

渐变文字 ColorTextVIew

名称

类型

说明

colortext_size

dimension

文字大小

colortext_default_color

reference,color

默认颜色

colortext_change_color

reference,color

渐变颜色

缩放控件 ScaleImageView

名称

类型

说明

scale_auto_time

reference,integer

双击时,达到放大的时间

scale_limit_board

boolean

是否限制边界,即不能缩放到比控件小

scale_autofit

boolean

自动适配缩放值,有些图片是正方形,如果你的高度没设定好,建议设置为false,不能会变形

scale_double_factor

integer

双击时放大倍数

scale_max_factor

integer

可放大的最大倍数

scale_interrupt_parent_touch

boolean

是否截获父控件触摸事件,放大时,需要截取,不然无法移动

如果你有想要的效果,而本项目中没有的,你可以在 issue 中提出来,作者看到了,会抽空去实现的,

如果有发现问题了或者需要提供哪些接口出来,也可以在 issue 中提出来。当然,喜欢请 start 或 fork 来一波。

代码是最好的老师,可以download,改成自己喜欢的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是在Android Viewpager轮播图中前后各添加一个面,实现无限手动滑动的完整代码: 1. 首先,在布局文件中添加ViewPager控件: ``` <androidx.viewpager.widget.ViewPager android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="wrap_content" /> ``` 2. 在Activity或Fragment中获取ViewPager控件,并设置适配器和监听器: ``` ViewPager viewPager = findViewById(R.id.viewPager); ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager(), imageList); viewPager.setAdapter(adapter); viewPager.setCurrentItem(1); // 设置ViewPager初始显示的面为第二个viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { // 当滑动到第一个或最后一个面时,自动跳转到对应的最后一个或第一个面 if (position == 0) { viewPager.setCurrentItem(imageList.size() - 2, false); } else if (position == imageList.size() - 1) { viewPager.setCurrentItem(1, false); } } @Override public void onPageScrollStateChanged(int state) { } }); ``` 3. 创建适配器ViewPagerAdapter,并重写其getItemCount()和getItemPosition()方法: ``` private class ViewPagerAdapter extends FragmentPagerAdapter { private List<String> mList; public ViewPagerAdapter(FragmentManager fm, List<String> list) { super(fm); this.mList = list; } @Override public Fragment getItem(int position) { return ImageFragment.newInstance(mList.get(position)); } @Override public int getCount() { return mList.size() + 2; // 在ViewPager前后各添加一个面 } @Override public int getItemPosition(@NonNull Object object) { return POSITION_NONE; // 当面刷新时,所有面都会被重新加载 } } ``` 4. 创建Fragment类ImageFragment,并在其布局文件中添加ImageView控件: ``` public class ImageFragment extends Fragment { private static final String ARG_IMAGE_URL = "image_url"; private String mImageUrl; public ImageFragment() { // Required empty public constructor } public static ImageFragment newInstance(String imageUrl) { ImageFragment fragment = new ImageFragment(); Bundle args = new Bundle(); args.putString(ARG_IMAGE_URL, imageUrl); fragment.setArguments(args); return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { mImageUrl = getArguments().getString(ARG_IMAGE_URL); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_image, container, false); ImageView imageView = view.findViewById(R.id.imageView); Glide.with(this).load(mImageUrl).into(imageView); return view; } } ``` 5. 最后,在AndroidManifest.xml文件中添加网络权限: ``` <uses-permission android:name="android.permission.INTERNET" /> ``` 至此,Android Viewpager轮播图在前后各添加一个实现无限手动滑动的代码就完成了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值