Android_Album_android图片选择库

作者: c34c13566bd2 | 来源:发表于2017-08-23 15:46 被阅读0次

    Album

    android album

    GitHub地址

    Chinese : wiki

    Screenshot

    multiple, radio, preview, crop, sample ui

    加载失败请移步至 Github 查看





    图片选择器

      选择图片,裁剪,拍照
    

    简单使用

    Manifests.xml 添加

        <activity
            android:name="com.yalantis.ucrop.UCropActivity"
            android:screenOrientation="portrait"
            android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
        <activity
            android:name="com.album.ui.activity.AlbumActivity"
            android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
        <activity
            android:name="com.album.ui.activity.PreviewActivity"
            android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
    

    gradle添加

    // 如果项目中 依赖了 design 高版本包,那么可以不用单独依赖 RecyclerView
    // 因为 高版本的 design 已经包含了 RecyclerView
    compile "com.android.support:design:$designVersion"
    or
    compile "com.android.support:recyclerview-v7:$supportLibraryVersion"
    
    // 这两个必须依赖,如果想使用 Glide 4.x  ,请自行实现 AlbumImageLoader
    compile "com.github.yalantis:ucrop:$ucropVersion"
    compile "com.github.bumptech.glide:glide:$glideVersion"
    

    示例

        Album
                .getInstance()
                .setAlbumModels(new ArrayList<AlbumModel>())
                .setOptions(new UCrop.Options())
                .setAlbumImageLoader(new SimpleAlbumImageLoader())
                .setConfig(new AlbumConfig())
                .setAlbumListener(new SimpleAlbumListener())
                .start(this);
    

    config

    //是否隐藏相机,默认不隐藏
    boolean hideCamera = false;
    
    //是否单选 ,默认多选
    boolean isRadio = false;
    
    //单选点击是否开启裁剪,默认开启,不开启直接返回当前点击的图片路径
    boolean isCrop = true;
    
    // 拍照之后是否直接裁剪,默认不裁剪
    boolean cameraCrop = false;
    
    //预览页多选数据变动,使用者点击 Toolbar 的 返回键 返回时 是否刷新多选数据,默认不刷新
    boolean previewFinishRefresh = false;
    
    //预览页多选数据变动,使用者点击 Back 的 返回键 返回时 是否刷新多选数据,默认不刷新
    boolean previewBackRefresh = false;
    
    //权限被拒绝时是否直接 finish 掉 图片选择库 的 Activity, 默认不 finish
    boolean isPermissionsDeniedFinish = false;
    
    //是否是使用 Fresco 加载图片,当使用 Fresco 时 必须设置为 true,返回的 ImageView 就是 Fresco 的 SimpleDraweeView
    boolean isFrescoImageLoader = false;
    
    //多选最多可选择几个
    int multipleMaxCount = 9;
    
    //照相路径
    String cameraPath = null;
    
    //裁剪路径
    String uCropPath = null;
    
    //分页加载时一次加载多少张图片
    int count = 200;
    
    // 图片页 Activity 的 Toolbar 一些设置
    int albumStatusBarColor = R.color.colorAlbumStatusBarColorDay;
    int albumToolbarBackground = R.color.colorAlbumToolbarBackgroundDay;
    int albumToolbarIcon = R.drawable.ic_action_back_day;
    int albumToolbarIconColor = R.color.colorAlbumToolbarIconColorDay;
    int albumToolbarTextColor = R.color.colorAlbumToolbarTextColorDay;
    int albumToolbarText = R.string.album_name;
    float albumToolbarElevation = 6f;
    
    // 图片页 Activity 底部的 View 一些设置
    private int albumBottomViewBackground = R.color.colorAlbumBottomViewBackgroundDay;
    private int albumBottomFinderTextSize = 16;
    private int albumBottomFinderTextBackground = -1;
    private int albumBottomFinderTextColor = R.color.colorAlbumBottomFinderTextColorDay;
    private int albumBottomFinderTextCompoundDrawable = R.drawable.ic_action_album_finder_day;
    private int albumBottomFinderTextDrawableColor = R.color.colorAlbumBottomFinderTextDrawableColorDay;
    private int albumBottomPreViewText = R.string.album_preview;
    private int albumBottomPreViewTextSize = 16;
    private int albumBottomPreViewTextColor = R.color.colorAlbumBottomPreViewTextColorDay;
    private int albumBottomPreviewTextBackground = -1;
    private int albumBottomSelectText = R.string.album_select;
    private int albumBottomSelectTextSize = 16;
    private int albumBottomSelectTextColor = R.color.colorAlbumBottomSelectTextColorDay;
    private int albumBottomSelectTextBackground = -1;
    
    // 图片页 Activity 文件夹目录的 一些设置
    int albumListPopupWidth = 600;
    int albumListPopupHorizontalOffset = 0;
    int albumListPopupVerticalOffset = 0;
    int albumListPopupItemBackground = R.color.colorAlbumListPopupItemBackgroundDay;
    int albumListPopupItemTextColor = R.color.colorAlbumListPopupItemTextColorDay;
    
    // 图片Fragment
    private int spanCount = 3;
    private int dividerWidth = 10;
    private int albumContentViewCameraTips = R.string.album_image_camera_tv_tips;
    private int albumContentViewCameraTipsSize = 18;
    private int albumContentViewCameraTipsColor = R.color.colorAlbumContentViewTipsColorDay;
    private int albumContentViewCameraBackgroundColor = R.color.colorAlbumContentViewBackgroundColorColorDay;
    private int albumContentViewBackground = R.color.colorAlbumContentViewBackgroundDay;
    private int albumContentViewCameraDrawable = R.drawable.ic_camera_alt_black_24dp;
    private int albumContentViewCameraDrawableColor = R.color.colorAlbumContentViewCameraDrawableColorDay;
    private int albumContentItemCheckBoxDrawable = R.drawable.selector_album_item_check;
    private int albumContentEmptyDrawable = R.drawable.ic_camera_alt_black_24dp;
    private int albumContentEmptyDrawableColor = R.color.colorAlbumContentEmptyDrawableColorDay;
    
    //预览页 一些设置
    private int albumPreviewTitle = R.string.preview_title;
    private int albumPreviewBackground = R.color.colorAlbumPreviewBackgroundDay;
    private int albumPreviewBottomViewBackground = R.color.colorAlbumPreviewBottomViewBackgroundDay;
    private int albumPreviewBottomOkText = R.string.preview_select;
    private int albumPreviewBottomOkTextColor = R.color.colorAlbumPreviewBottomViewOkColorDay;
    private int albumPreviewBottomCountTextColor = R.color.colorAlbumPreviewBottomViewCountColorDay;
    private int albumPreviewBottomOkTextSize = 16;
    private int albumPreviewBottomCountTextSize = 16;
    

    回调

    Album 已经放置了一个 SimpleAlbumListener

     public class SimpleAlbumListener implements AlbumListener {
        
            /**
             * 点击图片页Toolbar finish
             */
            @Override
            public void onAlbumActivityFinish() {
        
            }
        
            /**
             * 权限被拒绝
             * type:
             * <p>
             * *** AlbumConstant.TYPE_ALBUM : 读取权限被拒
             * *** AlbumConstant.TYPE_CAMERA : 相机权限被拒
             */
            @Override
            public void onAlbumPermissionsDenied(int type) {
        
            }
        
            /**
             * 点击 预览 或者 选择 按钮时 Fragment 为 null, 应该不会被触发..
             */
            @Override
            public void onAlbumFragmentNull() {
        
            }
        
            /**
             * 预览时,滑动 ViewPager 时 会检测图片是否还存在,不存在会触发
             * 触发条件: Home 放在后台,在其他软件中删掉了图片
             */
            @Override
            public void onAlbumPreviewFileNull() {
        
            }
        
            /**
             * 图片 文件夹 目录 为空,就是没有图片..
             */
            @Override
            public void onAlbumFinderNull() {
        
            }
        
            /**
             * 点击预览时没有选择图片
             */
            @Override
            public void onAlbumBottomPreviewNull() {
        
            }
        
            /**
             * 点击选择时 没有选择图片
             */
            @Override
            public void onAlbumBottomSelectNull() {
        
            }
        
            /**
             * 点击 ITEM 时,会判断当前图片是否存在
             * 触发条件: Home 放在后台,在其他软件中删掉了图片
             */
            @Override
            public void onAlbumFragmentFileNull() {
        
            }
        
            /**
             * 预览界面选择确定,但是没有选中的图片
             */
            @Override
            public void onAlbumPreviewSelectNull() {
        
            }
        
            /**
             * 多选点击 checkbox 时,会判断当前图片是否存在
             * 触发条件: Home 放在后台,在其他软件中删掉了图片
             * <p>
             * 此时可选择是否强制刷新图库信息
             */
            @Override
            public void onAlbumCheckBoxFileNull() {
        
            }
        
            /**
             * 裁剪被取消
             */
            @Override
            public void onAlbumFragmentCropCanceled() {
        
            }
        
            /**
             * 拍照被取消
             */
            @Override
            public void onAlbumFragmentCameraCanceled() {
        
            }
        
            /**
             * 裁剪出现异常
             */
            @Override
            public void onAlbumFragmentUCropError(@Nullable Throwable data) {
        
            }
        
            /**
             * 返回的选择图片信息
             * <p>
             * albumModel.getPath(); 为当前图片地址
             * <p>
             * 建议  FileUtils.isFile  判断一下图片是否还存在
             */
            @Override
            public void onAlbumResources(@NonNull List<AlbumModel> list) {
        
            }
        
            /**
             * 裁剪之后会返回的图片File
             */
            @Override
            public void onAlbumUCropResources(@Nullable File scannerFile) {
        
            }
        
            /**
             * 多选最多了
             */
            @Override
            public void onAlbumMaxCount() {
        
            }
        
            /**
             * 点击 back 返回到app
             */
            @Override
            public void onAlbumActivityBackPressed() {
        
            }
        
            /**
             * 打开相机失败,有可能是当前系统没有相机
             */
            @Override
            public void onAlbumOpenCameraError() {
        
            }
            
           // 本机没有图片
            @Override
            public void onAlbumEmpty() {
                
            }
        }
    

    自定义图片加载

    Album内部有一个SimpleGlideAlbumImageLoader,使用的是 Glide 3.x 版本,如果想使用这个,必须依赖 Glide 3.x

    目前主流的图片加载器,sample都有示例

    需要注意的是如果使用FrescoImageLoaderfrescoView(context,type) 必须返回正确的View,例如 fresco 的 预览时 双击缩放功能,需要额外依赖完成, type == 1 时 是预览页的图片加载

    Fresco

                Album
                        .getInstance()
                        .setConfig(new AlbumConfig().setFrescoImageLoader(true)  // 通知 Album 图片加载框架使用的是 Fresco
                        .start(this);
    

    SimpleFrescoAlbumImageLoader

    Glide 4.x

    SimpleGlide4xAlbumImageLoader

    Picasso

    SimplePicassoAlbumImageLoader

    这里需要说明的是,如果直接用 file 加载图片, Picasso 在某些手机上会出现 ExifInterface_JNI: Raw image not detected

    所以用Uri去加载图片

    universalimageloader

    SimpleImageLoaderAlbumImageLoader

    测试过的机型

    • onePlus3T 7.1.1
    • huawei ale-cl00 4.4.4
    • meizu mx5 5.1
    • galaxy S8+ 7.0
    • hanzhong 5.1
    • xiaomi note 6.0.1
    • redmi note4 6.0
    • oppo R7c 4.4.4
    • Lenovo K30-T 4.4.4

    混淆

    -dontwarn com.album.**
    -keep class  com.album.** { *;}
    -keep interface  com.album.** { *;}
    // ucrop
    -dontwarn com.yalantis.ucrop**
    -keep class com.yalantis.ucrop** { *; }
    -keep interface com.yalantis.ucrop** { *; }
    

    感谢

    TouchImageView

    关于MediaScannerConnection的内存泄露问题

    协议

    Mozilla Public License 2.0

    相关文章

      网友评论

        本文标题:Android_Album_android图片选择库

        本文链接:https://www.haomeiwen.com/subject/onoddxtx.html