美文网首页Android技术知识Android开发Android开发
一款强大的文件选择器-PrimPicker

一款强大的文件选择器-PrimPicker

作者: 289346a467da | 来源:发表于2018-06-12 12:23 被阅读232次

    PrimPicker

    PrimPicker GitHub

    PrimPicker is What ?

    PrimPicker is a load local image and video selector for Android。

    You Can :

    • select images include JPG PNG GIF BMP WEBP
    • select videos include MP4 3GP MPEG AVI
    • you impl image loaders
    • it in Activity or Fragment
    • More to commission find out yourself
    select perview picker
    device-2018-06-12-104844.png device-2018-06-12-104907.png device-2018-06-12-104805.png
    device-2018-06-12-110014 [320i].gif

    How Do I Use ?

    Gradle:

    repositories {
        jcenter()
    }
    
    dependencies {
        compile 'com.prim.lib:prim-picker:1.0.4'
    }
    

    Permission:

    android.permission.READ_EXTERNAL_STORAGE
    android.permission.WRITE_EXTERNAL_STORAGE
    android.permission.CAMERA
    

    如果运行Android 6.0+ 需要动态申请权限

    Coding:
    首先需要设置图片加载器,此处自己实现 ImageEngine 接口,好处:本库不用再导入图片加载库了,防止项目中图片加载库冲突或多个图片加载库

    需要注意的是:
    加载缩略图设置图片类型为centerCrop();
    加载预览图设置图片类型为fitCenter();

    class ImageLoader : ImageEngine {
            override fun loadImageThumbnail(context: Context?, resize: Int, placeholder: Drawable?, view: ImageView?, uri: Uri?) {
                Glide.with(context).load(uri).asBitmap().placeholder(placeholder).override(resize, resize).centerCrop().into(view)
            }
    
            override fun loadImage(context: Context?, resizeX: Int, resizeY: Int, placeholder: Drawable?, view: ImageView?, uri: Uri?) {
                Glide.with(context).load(uri).asBitmap().placeholder(placeholder).override(resizeX, resizeY).fitCenter().into(view)
            }
    
            override fun loadGifThumbnail(context: Context?, resize: Int, placeholder: Drawable?, view: ImageView?, uri: Uri?) {
                Glide.with(context).load(uri).asGif().placeholder(placeholder).override(resize, resize).centerCrop().into(view)
            }
    
            override fun loadGifImage(context: Context?, resizeX: Int, resizeY: Int, placeholder: Drawable?, view: ImageView?, uri: Uri?) {
                Glide.with(context).load(uri).asGif().placeholder(placeholder).override(resizeX, resizeY).into(view)
            }
    
        }
    
     /**
         * 设置图片加载器,此处自己实现 ImageEngine 接口,
         * 好处:本库不用再导入图片加载库了,防止项目中图片加载库冲突或多个图片加载库
         *
         * @param imageLoader
         *         图片加载器
         *
         * @return PreviewBuilder
         */
        public PreviewBuilder setImageLoader(ImageEngine imageLoader) {
            this.selectSpec.imageLoader = imageLoader;
            return this;
        }
    

    select file(选择文件)

              PrimPicker
                    .with(this)
                    .choose(MimeType.ofImage())
                    .setSpanCount(3)
                    .setMaxSelected(9)
                    .setImageLoader(ImageLoader())
                    .setShowSingleMediaType(true)
                    .setCapture(true)
                    .setDefaultItems(list)
                    .lastGo(1001)
    

    get select file date(获取选择文件的数据)

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
            super.onActivityResult(requestCode, resultCode, data)
            if (requestCode == 1001 && resultCode == Activity.RESULT_OK) {
                list = PrimPicker.obtainItemsResult(data)
                pathlist = PrimPicker.obtainPathResult(data)
            }
        }
    

    Get Uri or Path or MediaItem

     /** 获取返回值 uri */
        public static ArrayList<Uri> obtainUriResult(Intent data) {
            return data.getParcelableArrayListExtra(EXTRA_RESULT_SELECTION);
        }
    
        /** 获取返回值 string path */
        public static ArrayList<String> obtainPathResult(Intent data) {
            return data.getStringArrayListExtra(EXTRA_RESULT_SELECTION_PATH);
        }
    
        /** 获取返回值 boolean 是否压缩 如压缩需自己处理,本库没有实现该功能 */
        public static boolean obtainCompressResult(Intent data) {
            return data.getBooleanExtra(EXTRA_RESULT_COMPRESS, false);
        }
    
        /** 获取返回值 MediaItem 追加文件或预览文件时使用 */
        public static ArrayList<MediaItem> obtainItemsResult(Intent data) {
            return data.getParcelableArrayListExtra(EXTRA_RESULT_ITEMS);
        }
    

    Add File(追加文件)

    setDefaultItems(list) 选择文件得到的返回数据List<MediaItem> list 你可以对文件删除部分,想追加新的文件,将对list操作后的数据传入

             PrimPicker
                    .with(this)
                    .choose(MimeType.ofImage())
                    .setSpanCount(3)
                    .setMaxSelected(9)
                    .setImageLoader(ImageLoader())
                    .setShowSingleMediaType(true)
                    .setCapture(true)
                    .setDefaultItems(list)
                    .lastGo(1001)
    

    PerView File(对选择返回后的文件预览)

                PrimPicker
                        .with(this)
                        .preview(MimeType.ofImage())
                        .setImageLoader(ImageLoader())
                        .setPreviewItems(list)
                        .lastGo(1001)
    

    More API(更多API)

    /**
         * 设置是否可以拍照和录像
         *
         * @param capture
         *         true 会在第一个显示view false 不显示
         *
         * @return SelectBuilder
         */
        public SelectBuilder setCapture(boolean capture) {
            selectSpec.capture = capture;
            return this;
        }
    
        /**
         * 设置是否压缩视频和图片,压缩需要自己实现,此库没有实现该功能
         *
         * @param compress
         *         true 压缩 false 不压缩
         *
         * @return SelectBuilder
         */
        public SelectBuilder setCompress(boolean compress) {
            selectSpec.compress = compress;
            return this;
        }
    
        /**
         * 设置所选视频的最大时长
         *
         * @param duration
         *         毫秒
         *
         * @return SelectBuilder
         */
        public SelectBuilder setSelectVideoMaxDurationS(long duration) {
            selectSpec.selectVideoMaxDuration = duration;
            return this;
        }
    
        /**
         * 设置所选视频文件的最大的大小
         *
         * @param size
         *         KB
         *
         * @return SelectBuilder
         */
        public SelectBuilder setSelectVideoMaxSizeKB(long size) {
            selectSpec.selectVideoMaxSizeKB = size;
            return this;
        }
    
        /**
         * 设置所选视频文件的最大的大小
         *
         * @param size
         *         M
         *
         * @return SelectBuilder
         */
        public SelectBuilder setSelectVideoMaxSizeM(long size) {
            selectSpec.selectVideoMaxSizeM = size;
            return this;
        }
    
        /**
         * 设置预览界面可否进行选择和取消选择文件的操作,并与选择页面同步
         *
         * @param allow
         *         true 允许 false 不允许
         *
         * @return SelectBuilder
         */
        public SelectBuilder setPerAllowSelect(boolean allow) {
            selectSpec.isPerAllowSelect = allow;
            return this;
        }
    
        /**
         * 设置点击item 预览点击的item 其他的无法预览
         * 注意此方法和{@link #setClickItemPerOrSelect(boolean) {@link #setPerViewEnable(boolean)}}
         * 两个方法相关setClickItemPerOrSelect setPerViewEnable 都为true时此方法生效,否则此方法不生效
         *
         * @param single
         *         true 只预览点击的item false 点击item如果可以进入预览页 则可以预览所有文件
         *
         * @return SelectBuilder
         */
        public SelectBuilder setPerClickShowSingle(boolean single) {
            selectSpec.isPerClickShowSingle = single;
            return this;
        }
    
        /**
         * 在之前的数据基础上追加数据
         * 此数据是从选择文件中返回的数据{@link PrimPicker}.obtainItemsResult()
         * 本库没有存储此数据,主要是如果外部对文件数据删除,库中无法修改数据.
         * 所以从选择文件得到的数据,你可以做任何操作,然后将这些数据传入即可.
         *
         * @param mediaItems
         *         之前选择的数据
         *
         * @return SelectBuilder
         */
        public SelectBuilder setDefaultItems(ArrayList<MediaItem> mediaItems) {
            selectSpec.mediaItems = mediaItems;
            return this;
        }
    
        /**
         * 设置选择器是否具备预览功能,默认开启预览功能
         *
         * @param enable
         *         true 开启预览功能 false 不开启预览功能
         *
         * @return SelectBuilder
         */
        public SelectBuilder setPerViewEnable(boolean enable) {
            selectSpec.isPerViewEnable = enable;
            return this;
        }
    
        /**
         * 设置点击item 是预览还是选中
         *
         * @param enable
         *         true 点击item预览item ; FALSE 点击item选中item
         *
         * @return
         */
        public SelectBuilder setClickItemPerOrSelect(boolean enable) {
            selectSpec.isClickItemPerOrSelect = enable;
            return this;
        }
    

    Thanks

    Matisse source code.

    相关文章

      网友评论

      本文标题:一款强大的文件选择器-PrimPicker

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