Android Recyclerview 实现画廊功能

简介: 你有你的各种需(借)求(鉴),我有我的各种措施,不是很强,但是很酷! 安排~(听说这句话最近很火)最近啊,公司有个需求,想实现一个画廊效果,我找了两个App去给他看,问他是要类似于viewpager的有翻页的效果,还是想要跟列表似的,手滑动到哪里就停留在哪里。

你有你的各种需(借)求(鉴),我有我的各种措施,不是很强,但是很酷! 安排~(听说这句话最近很火)

最近啊,公司有个需求,想实现一个画廊效果,我找了两个App去给他看,问他是要类似于viewpager的有翻页的效果,还是想要跟列表似的,手滑动到哪里就停留在哪里。 然后产品回复我说:就跟它的一样(某个app),按照他的做就行,我的心里有些波澜,甚至想****;好了不说了。写效果吧。


img_b58b17108a3c136817b0fd04d970d5f9.gif
gif.gif

不知道为什么是反着的,啊,凑合看吧。就是这种卡片轮播。
其他的不说了,直接上代码。

//recyclerview滑动监听
hignHeadRecycler.addOnScrollListener(new RecyclerView.OnScrollListener() {
    @Override
 public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
        super.onScrolled(recyclerView, dx, dy);
        int childCount = recyclerView.getChildCount();//总item的数量
 int width = recyclerView.getChildAt(0).getWidth();//第一个item的宽度
 int padding = (recyclerView.getWidth() - width) / 2;//这个padding是 recycler的宽度减去第一个item的宽度然后除以2,作为padding
 for (int j = 0; j < childCount; j++) {
            View v = recyclerView.getChildAt(j);//获取每一个child
 float rate = 0;//是一个缩放比例
 if (v.getLeft() <= padding) {//如果view距离左边的宽度 小于等于 左侧剩余空间(padding) (意味着这个view开始往左边滑动了,并且有遮挡)
 if (v.getLeft() >= padding - v.getWidth()) {//如果view距离左边的距离 小于等于滑进去的距离 (其实就是说滑动到一半的时候)
 rate = (padding - v.getLeft()) * 1f / v.getWidth();//(这个比例的计算结果一般都会大于1,这样一来,根据下面的 1- rate * 0.1 得出,这个比例最多不会到达1,也就是 1- 0.1, 也就是 0.9, 所以这个view的宽度最大不会小于他本身的90%)
 } else {
                    rate = 1;
                }
                v.setScaleY(1 - rate * 0.1f);
            } else {
                if (v.getLeft() <= recyclerView.getWidth() - padding) {//这个过程大概是指这个view 从最后侧刚刚出现的时候开始滑动过padding的距离
 rate = (recyclerView.getWidth() - padding - v.getLeft()) * 1f / v.getWidth();
                }
                v.setScaleY(0.9f + rate * 0.1f);
            }
        }

    }
});
 

//加载完成后的监听
hignHeadRecycler.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
    @Override
 public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
        if (hignHeadRecycler.getChildCount() < 3) {
            if (hignHeadRecycler.getChildAt(1) != null) {
                View v1 = hignHeadRecycler.getChildAt(1);
                v1.setScaleY(0.9f);
            }
        } else {
            if (hignHeadRecycler.getChildAt(0) != null) {
                View v0 = hignHeadRecycler.getChildAt(0);
                v0.setScaleY(0.9f);
            }
            if (hignHeadRecycler.getChildAt(2) != null) {
                View v2 = hignHeadRecycler.getChildAt(2);
                v2.setScaleY(0.9f);
            }
        }
    }
});

在监听里写出了我自己的理解,想理解的就结合注释和代码看看,想直接拿去用当然也方便你,哈哈。

还有要注意一点,写Holder的时候,记得不要用match,这里我在Adapter里手动设置了一下。可以借鉴。

view.setLayoutParams(new LinearLayout.LayoutParams((int) (UiSizeHelper.getScreenWidth() * 0.9), LinearLayoutCompat.LayoutParams.WRAP_CONTENT));
//这里 (UiSizeHelper.getScreenWidth() * 0.9)指的是屏幕宽度的90%,这样一来左右两边就都能展示出一点了。

ok,到这里。下课。

相关文章
|
14天前
|
Android开发 开发者 索引
Android实战经验之如何使用DiffUtil提升RecyclerView的刷新性能
本文介绍如何使用 `DiffUtil` 实现 `RecyclerView` 数据集的高效更新,避免不必要的全局刷新,尤其适用于处理大量数据场景。通过定义 `DiffUtil.Callback`、计算差异并应用到适配器,可以显著提升性能。同时,文章还列举了常见错误及原因,帮助开发者避免陷阱。
34 9
|
15天前
|
存储 缓存 Android开发
Android RecyclerView 缓存机制深度解析与面试题
本文首发于公众号“AntDream”,详细解析了 `RecyclerView` 的缓存机制,包括多级缓存的原理与流程,并提供了常见面试题及答案。通过本文,你将深入了解 `RecyclerView` 的高性能秘诀,提升列表和网格的开发技能。
39 8
|
2月前
|
编解码 测试技术 Android开发
Android经典实战之用 CameraX 库实现高质量的照片和视频拍摄功能
本文详细介绍了如何利用CameraX库实现高质量的照片及视频拍摄功能,包括添加依赖、初始化、权限请求、配置预览与捕获等关键步骤。此外,还特别针对不同分辨率和帧率的视频拍摄提供了性能优化策略,确保应用既高效又稳定。
90 1
Android经典实战之用 CameraX 库实现高质量的照片和视频拍摄功能
|
10天前
|
Android开发 开发者
Android平台无纸化同屏如何实现实时录像功能
Android平台无纸化同屏,如果需要本地录像的话,实现难度不大,只要复用之前开发的录像模块的就可以,对我们来说,同屏采集这块,只是数据源不同而已,如果是自采集的其他数据,我们一样可以编码录像。
|
2月前
|
图形学 Android开发
小功能⭐️Unity调用Android常用事件
小功能⭐️Unity调用Android常用事件
|
2月前
|
存储 Android开发 开发者
Android项目架构设计问题之定义RecyclerView的ViewHolder如何解决
Android项目架构设计问题之定义RecyclerView的ViewHolder如何解决
32 0
|
2月前
|
数据可视化 Java 数据挖掘
Android项目架构设计问题之设置RecyclerView的LayoutManager如何解决
Android项目架构设计问题之设置RecyclerView的LayoutManager如何解决
27 0
|
4月前
|
API Android开发 开发者
`RecyclerView`是Android API 21引入的UI组件,用于替代ListView和GridView
【6月更文挑战第26天】`RecyclerView`是Android API 21引入的UI组件,用于替代ListView和GridView。它提供高效的数据视图复用,优化的布局管理,支持多种布局(如线性、网格),并解耦数据、适配器和视图。RecyclerView的灵活性、性能(如局部刷新和动画支持)和扩展性使其成为现代Android开发的首选,特别是在处理大规模数据集时。
49 2
|
4月前
|
数据库 Android开发 数据安全/隐私保护
在 Android Studio 中结合使用 SQLite 数据库实现简单的注册和登录功能
在 Android Studio 中结合使用 SQLite 数据库实现简单的注册和登录功能
178 2
|
4月前
|
Android开发
Android中如何快速的实现RecycleView的拖动重排序功能
使用`ItemTouchHelper`和自定义`Callback`,在`RecyclerView`中实现拖动排序功能。定义`ItemTouchHelperAdapter`接口,`Adapter`实现它以处理`onItemMove`方法。`SimpleItemTouchHelperCallback`设置拖动标志,如`LEFT`或`RIGHT`(水平拖动),并绑定到`RecyclerView`以启用拖动。完成这些步骤后,即可实现拖放排序。关注公众号“AntDream”获取更多内容。
84 3
下一篇
无影云桌面