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

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

图库地址:代码

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

一、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 ------------------------------------------------------------------------------------------------

目录
相关文章
|
4天前
宽屏好看的个人引导页源码
宽屏好看的个人引导页源码,源码由HTML+CSS+JS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果
22 5
宽屏好看的个人引导页源码
|
4月前
|
Python
Python制作gif表情包生成工具,斗图再也不会输啦
Python制作gif表情包生成工具,斗图再也不会输啦
|
4月前
|
移动开发 JavaScript 前端开发
用惯了其他人的库,自己来实现一个动图图表生成工具,真香!
用惯了其他人的库,自己来实现一个动图图表生成工具,真香!
|
4月前
|
Python
Python制作gif生成工具,斗图再也不会输啦
Python制作gif生成工具,斗图再也不会输啦
|
4月前
|
图形学
如何在微信小游戏制作工具中做出好看的粒子效果?
如何在微信小游戏制作工具中做出好看的粒子效果?
44 1
|
4月前
微信小游戏制作工具中的分享功能怎么用?
微信小游戏制作工具中的分享功能怎么用?
30 0
|
8月前
|
存储 数据采集 JavaScript
【小白必看】使用Python批量下载英雄联盟皮肤图片的技术实现
【小白必看】使用Python批量下载英雄联盟皮肤图片的技术实现
83 1
|
9月前
|
前端开发
前端代码分享——霓虹灯图标菜单特效(内含源码)
前端代码分享——霓虹灯图标菜单特效(内含源码)
|
11月前
|
开发工具 UED 开发者
在微信小游戏制作工具中实现各种效果和功能的按钮
在游戏设计中有一个名词叫“反馈”,大体就是指当玩家在进行游戏时,游戏所给予玩家的一些东西,比如常见的在点击按钮时,按钮会变换颜色,或进行缩放,或播放音效等等。总之,不论玩家在游戏中进行任何的操作,游戏都应该给予玩家一个合理的反馈。让玩家能够明白他的操作所获得的结果是什么。
263 0
|
JavaScript 开发者
ElUpload不好用?一文教你实现一个简易图片上传预览组件
ElUpload不好用?一文教你实现一个简易图片上传预览组件
358 0