zoukankan      html  css  js  c++  java
  • Android开发之高仿微信图片选择器

    记得刚开始做Andriod项目那会,经常会碰到一些上传图片的功能需求,特别是社交类的app,比如用户头像,说说配图,商品配图等功能都需要让我们到系统相册去选取图片,但官方却没有提供可以选取多张图片的相关API,所以那时候会到Github上去找找相关的开源库,也觉得挺方便的,但随着后来Android系统的更新,带来了很多新特性和API的改变,比如从Android6.0后的动态权限申请,7.0的私有目录权限以及一些API的废弃(Uri.fromFile等),但所用的开源库作者又没有很及时的去更新适配,又或者一些开源库直接在库中引入了图片加载框架,导致项目中存在多个图片加载框架,这样就造成了包体积的增大和方法数的增加,导致项目中或多或少会出现一些问题,所以那时萌生了想自己写一个图片选择器,尽可能的做到简洁,速度快,然后一个图片选择器的库就这么诞生了:ImagePicker图片加载器

    实现效果图:

     
    效果图1

     
    效果图2

     
    效果图3

     
    效果图4

    相比1.0.+版本,2.0版本进行了代码的大块重构,注重模块间的代码解耦,简化了配置,将兼容Android7.0所需要的FileProvider下沉到库中完成,不再需要开发者配置,并对GIF图,视频,大图预览等功能有了支持。

    1、如何在项目中引入该图片加载库:

    //gradle版本在3.0以下引入此行
    compile 'com.lcw.library:imagepicker:2.1.2'
    
    //gradle版本在3.0以上引入此行
    implementation 'com.lcw.library:imagepicker:2.1.2'
    

    2、一行代码调用:

                    ImagePicker.getInstance()
                            .setTitle("标题")//设置标题
                            .showCamera(true)//设置是否显示拍照按钮
                            .showImage(true)//设置是否展示图片
                            .showVideo(true)//设置是否展示视频
                            .setMaxCount(9)//设置最大选择图片数目(默认为1,单选)
                            .setImagePaths(mImageList)//保存上一次选择图片的状态,如果不需要可以忽略
                            .setImageLoader(new GlideLoader())//设置自定义图片加载器
                            .start(MainActivity.this, REQUEST_SELECT_IMAGES_CODE);//REQEST_SELECT_IMAGES_CODE为Intent调用的requestCode
    

    3、如何获取选中的图片集合:

        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            if (requestCode == REQUEST_SELECT_IMAGES_CODE && resultCode == RESULT_OK) {
                List<String> imagePaths = data.getStringArrayListExtra(ImagePicker.EXTRA_SELECT_IMAGES);
            }
        }
    

    4、如何自定义图片加载器(不定死框架,让框架更加灵活,需要去实现ImageLoader接口即可):

    public class GlideLoader implements ImageLoader {
        //to do something 可以参考Demo用法
    }
    

    写在最后:

    这个库会持续维护下去,后续会把大图预览,裁剪等功能添加进去,遵循极简的原则,把库做的尽可能的小,欢迎大家提建议,更加具体的使用请参考下面源码中的Demo演示~

    版本更新里程碑:

    Version1.0.0:

    1、可预览各文件夹下的图片
    2、可配置是否支持相机拍照
    3、可配置选择图片模式(单选/多选)
    4、可配置选择图片数量 5、可配置图片加载框架

    Version1.1.0:

    1、新增大图预览功能(初步实现,考虑性能后期会改为Fragment承载,单一Activity架构)
    2、更改选择图片文件夹弹窗高度
    3、更改ImageLoader接口,开放小图加载、大图加载、清除缓存方法

    Version2.0.0:

    1、重构了大量的代码,更加注重代码间的解耦,相比1.0版本简化了配置项(下沉FileProvider),让开发者可以更专注于业务。
    2、添加媒体库扫描对GIF、视频的支持,并开放接口让开发者自行实现视频播放逻辑。
    3、添加媒体库加载策略,开发者可自行配置加载图片或者视频,灵活运用于不同业务实现。
    4、完善大图预览功能,完善部分UI界面的显示。

    源码下载:

    这里附上源码地址(欢迎Star,欢迎Fork):ImagePicker

     
  • 相关阅读:
    .NetCore Grpc 客服端 工厂模式配置授权
    DOCKER 拉取 dotnet 镜像太慢 docker pull mcr.microsoft.com too slow
    Introducing .NET 5
    VSCode 出现错误 System.IO.IOException: The configured user limit (128) on the number of inotify instances has been reached.
    Omnisharp VsCode Attaching to remote processes
    zookeeper3.5.5 centos7 完全分布式 搭建随记
    Hadoop2.7.7 centos7 完全分布式 配置与问题随记
    MySQL索引 索引分类 最左前缀原则 覆盖索引 索引下推 联合索引顺序
    SQL基础随记3 范式 键
    MySQL调优 优化需要考虑哪些方面
  • 原文地址:https://www.cnblogs.com/yelanggu/p/10831537.html
Copyright © 2011-2022 走看看