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,到这里。下课。

相关文章
|
29天前
|
编解码 测试技术 Android开发
Android经典实战之用 CameraX 库实现高质量的照片和视频拍摄功能
本文详细介绍了如何利用CameraX库实现高质量的照片及视频拍摄功能,包括添加依赖、初始化、权限请求、配置预览与捕获等关键步骤。此外,还特别针对不同分辨率和帧率的视频拍摄提供了性能优化策略,确保应用既高效又稳定。
62 1
Android经典实战之用 CameraX 库实现高质量的照片和视频拍摄功能
|
1月前
|
图形学 Android开发
小功能⭐️Unity调用Android常用事件
小功能⭐️Unity调用Android常用事件
|
30天前
|
存储 Android开发 开发者
Android项目架构设计问题之定义RecyclerView的ViewHolder如何解决
Android项目架构设计问题之定义RecyclerView的ViewHolder如何解决
28 0
|
30天前
|
数据可视化 Java 数据挖掘
Android项目架构设计问题之设置RecyclerView的LayoutManager如何解决
Android项目架构设计问题之设置RecyclerView的LayoutManager如何解决
24 0
|
3月前
|
API Android开发 开发者
`RecyclerView`是Android API 21引入的UI组件,用于替代ListView和GridView
【6月更文挑战第26天】`RecyclerView`是Android API 21引入的UI组件,用于替代ListView和GridView。它提供高效的数据视图复用,优化的布局管理,支持多种布局(如线性、网格),并解耦数据、适配器和视图。RecyclerView的灵活性、性能(如局部刷新和动画支持)和扩展性使其成为现代Android开发的首选,特别是在处理大规模数据集时。
44 2
|
3月前
|
数据库 Android开发 数据安全/隐私保护
在 Android Studio 中结合使用 SQLite 数据库实现简单的注册和登录功能
在 Android Studio 中结合使用 SQLite 数据库实现简单的注册和登录功能
157 2
|
3月前
|
Android开发
Android中如何快速的实现RecycleView的拖动重排序功能
使用`ItemTouchHelper`和自定义`Callback`,在`RecyclerView`中实现拖动排序功能。定义`ItemTouchHelperAdapter`接口,`Adapter`实现它以处理`onItemMove`方法。`SimpleItemTouchHelperCallback`设置拖动标志,如`LEFT`或`RIGHT`(水平拖动),并绑定到`RecyclerView`以启用拖动。完成这些步骤后,即可实现拖放排序。关注公众号“AntDream”获取更多内容。
79 3
|
3月前
|
Android开发 Kotlin
Android面试题 之 Kotlin DataBinding 图片加载和绑定RecyclerView
本文介绍了如何在Android中使用DataBinding和BindingAdapter。示例展示了如何创建`MyBindingAdapter`,包含一个`setImage`方法来设置ImageView的图片。布局文件使用`&lt;data&gt;`标签定义变量,并通过`app:image`调用BindingAdapter。在Activity中设置变量值传递给Adapter处理。此外,还展示了如何在RecyclerView的Adapter中使用DataBinding,如`MyAdapter`,在子布局`item.xml`中绑定User对象到视图。关注公众号AntDream阅读更多内容。
63 1
|
4月前
|
移动开发 监控 Android开发
构建高效Android应用:从内存优化到电池寿命代码之美:从功能实现到艺术创作
【5月更文挑战第28天】 在移动开发领域,特别是针对Android系统,性能优化始终是关键议题之一。本文深入探讨了如何通过细致的内存管理和电池使用策略,提升Android应用的运行效率和用户体验。文章不仅涵盖了现代Android设备上常见的内存泄漏问题,还提出了有效的解决方案,包括代码级优化和使用工具进行诊断。同时,文中也详细阐述了如何通过减少不必要的后台服务、合理管理设备唤醒锁以及优化网络调用等手段延长应用的电池续航时间。这些方法和技术旨在帮助开发者构建更加健壮、高效的Android应用程序。
|
3月前
|
XML Java Android开发
Android RecyclerView用代码动态设置item的selector
Android RecyclerView用代码动态设置item的selector
32 0