相册功能的实现和使用PictureSelector

1.使用camerax的拍照功能,把图片存储到自定义文件中,那也应该有相册功能

新建相册页面的layout和activity

在activity_album.xml中创建RecyclerView来放图片

2.先创建RecyclerView中的每个item的布局,再把这个布局放到RecyclerView的适配器中

在recycler_view_item.xml中

在PhotoRecyclerView中填充item布局

3.要完成相册就需要获取文件的读写权限

在AndroidManifest.xml中

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

注意:Android6后需在代码中动态请求权限

4.在AlbumActivity.kt中获取指定目录下的图片file传入适配器中,AlBUM_NAME为指定包名

//获取拍照文件下的图片集合传到适配器
val albumDir = File(Environment.getExternalStorageDirectory(), ALBUM_NAME)
val fileList = albumDir.listFiles()
val files = mutableListOf<File>()
files.addAll(fileList)

val adapter = PhotoRecyclerViewAdapter(files)
recycler_view_album.adapter = adapter

注意:这边获取的是file流的列表传入适配器中,所以指定的适配器也应该为file流列表

class PhotoRecyclerViewAdapter(list: MutableList<File>)

5.完成上面就可以看到指定目录下的图片列表了,这边引入PictureSelector来预览图片

在app下的build.gradle导入依赖

implementation 'io.github.lucksiege:pictureselector:v2.7.3-rc05'

注意:确定PictureSelector中的CameraX依赖是否与自己项目中一致,不然会出现CameraX is not configured properly的bug

6.在AlbumActivity.kt中获取RecyclerView中item的监听事件,并创建图片选择器和需要用到的功能

//RecyclerView中item的监听事件
adapter.listener = object : OnItemClickListener<File>() {
    override fun onClick(view: View, position: Int, data: File?, viewType: Int) {
        //定义传入图片选择器中的图片集合
        val selectList: MutableList<LocalMedia> = ArrayList()
        //,遍历file列表,把每个file流中的属性set到这个集合中
        for (file in fileList){
            var localMedia = LocalMedia()
            localMedia.path = file.path
            localMedia.duration = 0
            localMedia.position = position
            localMedia.mimeType = "image/png"
            selectList.add(localMedia)
        }

        //图片选择器的创建和功能配置
        PictureSelector.create(this@AlbumActivity)
            .themeStyle(R.style.picture_default_style) // xml设置主题
            //.setPictureWindowAnimationStyle(animationStyle)// 自定义页面启动动画
            .setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED) // 设置相册Activity方向,不设置默认使用系统
            .isNotPreviewDownload(true) // 预览图片长按是否可以下载
            //.bindCustomPlayVideoCallback(new MyVideoSelectedPlayCallback(getContext()))// 自定义播放回调控制,用户可以使用自己的视频播放界面
            .imageEngine(GlideEngine.createGlideEngine()) // 外部传入图片加载引擎,必传项
            .openExternalPreview(position, selectList)
    }
}

7.实现效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值