关于实现一个图片选择库踩过的坑

简介: 实现一个图片选择库踩过的坑

图库地址:代码

目前,该图片选择库,仍然在更新迭代中。
本文是专门记录该图库在开发过程中遇到的坑。

一、FileProvider定义问题

由于当初的FileProvider定义不当,会导致编译时候,报AndroidManifest合并报错。
先放出原来有可能引起报错的代码,如下图:

<provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="${applicationId}.fileProvider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/provider_paths" />
                android:resource="@xml/lib_pic_provider_paths" />
 </provider>

由于“name”是“androidx.core.content.FileProvider”,所以就有可能存在重复导致合并过程中报错。修改如下:

        <provider
            android:name="com.north.light.libpicselect.fileprovider.LibPicFileProvider"
            android:authorities="${applicationId}.fileProvider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/lib_pic_provider_paths" />
        </provider>

name换成了具体定义的一个类即可。

注意:使用的时候 FileProvider.getUriForFile 需要和 authorities保持一致。

二、图片错乱

使用RecyclerView和Glide配合加载图片,就有可能出现这种情况。再者,配合RecyclerView滑动时不加载,停止时才加载的监听。这个bug会让开发者一度陷入自我怀疑。
首先,拆分问题:
(一)不用RecyclerView滑动监听优化的情况下,如何解决?没错,只需要使用tag就可以实现了。具体就是在value目录下,先自定义一个id,然后在adapter的bind holder过程中,通过settag,gettag判断,符合才加载。这样就能解决大部分问题了。
(二)配合了RecyclerView滑动监听优化的情况下,还是会出现某个位置的图片错乱。我遇到的情况是。第一个位置显示了本地“相机"图片。然后配合了RecyclerView滑动监听优化下,”相机“图片会出现不了。原理其实很简单:
(1)ViewHolder是复用的,有可能是上一次的图片。
(2)RecyclerView停止时才加载,但是这个时候,bindholder方法已经走完,存在时间差。
解决方法--直接用一个新的控件,用于显示”相机“图标布局。

三、图片的加载

对于图片加载,本图库完全交由开发者外部处理。图库中不含任何图片加载三方库。
为什么这样设计?原因如下:
(1)没必要引入不需要的库,就算引入,也要交由开发者选择
(2)避免版本不同导致的兼容性问题
(3)减少库体积

that's all ------------------------------------------------------------------------------------------------

目录
相关文章
|
SQL 开发框架 数据可视化
企业应用开发中.NET EF常用哪种模式?
企业应用开发中.NET EF常用哪种模式?
196 5
|
Web App开发 缓存 安全
WIN11 Chrome 双击打不开闪退及Chrome浏览器不能拖拽文件crx
【11月更文挑战第6天】本文介绍了 WIN11 系统中 Chrome 浏览器双击打不开闪退及不能拖拽文件 crx 的原因和解决方法。包括浏览器版本过旧、扩展程序冲突、硬件加速问题、缓存过多、安全软件冲突、系统文件损坏、用户配置文件损坏等问题的解决方案,以及 crx 文件的屏蔽、权限问题和文件格式问题的处理方法。
3890 2
|
负载均衡 网络协议 算法
|
SQL 数据挖掘
7张图总结:SQL 数据分析常用语句!
7张图总结:SQL 数据分析常用语句!
278 8
|
机器学习/深度学习 人工智能 机器人
|
程序员 API C语言
C语言函数大全--c开头的函数
【6月更文挑战第4天】本篇介绍 C语言中 c开头的函数【C语言函数大全】
346 2
C语言函数大全--c开头的函数
|
计算机视觉 网络架构
【YOLOv8改进 - 卷积Conv】DWRSeg:扩张式残差分割网络,提高特征提取效率和多尺度信息获取能力,助力小目标检测
YOLO目标检测专栏探讨了YOLO的创新改进,如多尺度特征提取的DWRSeg网络。该网络通过区域残差化和语义残差化提升效率,使用DWR和SIR模块优化高层和低层特征。DWRSeg在Cityscapes和CamVid数据集上表现优秀,速度与准确性兼备。论文和代码已公开。核心代码展示了一个包含DWR模块的卷积层。更多配置详情见相关链接。
|
Java 开发者 微服务
Spring Cloud原理详解
【5月更文挑战第4天】Spring Cloud是Spring生态系统中的微服务框架,包含配置管理、服务发现、断路器、API网关等工具,简化分布式系统开发。核心组件如Eureka(服务发现)、Config Server(配置中心)、Ribbon(负载均衡)、Hystrix(断路器)、Zuul(API网关)等。本文讨论了Spring Cloud的基本概念、核心组件、常见问题及解决策略,并提供代码示例,帮助开发者更好地理解和实践微服务架构。此外,还涵盖了服务通信方式、安全性、性能优化、自动化部署、服务网格和无服务器架构的融合等话题,揭示了微服务架构的未来趋势。
404 6
|
JavaScript
Vue.mixin 的使用场景和原理
Vue.mixin 的使用场景和原理
206 0