zoukankan      html  css  js  c++  java
  • 团队博客

    Android 选择图片、上传图片之PictureSelector(测试版)

    PictureSelector.create(MainActivity.this)
         .openGallery()//全部.PictureMimeType.ofAll()、图片.ofImage()、视频.ofVideo()、音频.ofAudio()
         .theme()//主题样式(不设置为默认样式) 也可参考demo values/styles下 例如:R.style.picture.white.style
         .maxSelectNum()// 最大图片选择数量 int
         .minSelectNum()// 最小选择数量 int
        .imageSpanCount(4)// 每行显示个数 int
         .selectionMode()// 多选 or 单选 PictureConfig.MULTIPLE or PictureConfig.SINGLE
         .previewImage()// 是否可预览图片 true or false
         .previewVideo()// 是否可预览视频 true or false
        .enablePreviewAudio() // 是否可播放音频 true or false
         .isCamera()// 是否显示拍照按钮 true or false
        .imageFormat(PictureMimeType.PNG)// 拍照保存图片格式后缀,默认jpeg
        .isZoomAnim(true)// 图片列表点击 缩放效果 默认true
        .sizeMultiplier(0.5f)// glide 加载图片大小 0~1之间 如设置 .glideOverride()无效
        .setOutputCameraPath("/CustomPath")// 自定义拍照保存路径,可不填
         .enableCrop()// 是否裁剪 true or false
         .compress()// 是否压缩 true or false
         .glideOverride()// int glide 加载宽高,越小图片列表越流畅,但会影响列表图片浏览的清晰度
         .withAspectRatio()// int 裁剪比例 如16:9 3:2 3:4 1:1 可自定义
         .hideBottomControls()// 是否显示uCrop工具栏,默认不显示 true or false
         .isGif()// 是否显示gif图片 true or false
        .compressSavePath(getPath())//压缩图片保存地址
         .freeStyleCropEnabled()// 裁剪框是否可拖拽 true or false
         .circleDimmedLayer()// 是否圆形裁剪 true or false
         .showCropFrame()// 是否显示裁剪矩形边框 圆形裁剪时建议设为false   true or false
         .showCropGrid()// 是否显示裁剪矩形网格 圆形裁剪时建议设为false    true or false
         .openClickSound()// 是否开启点击声音 true or false
         .selectionMedia()// 是否传入已选图片 List<LocalMedia> list
         .previewEggs()// 预览图片时 是否增强左右滑动图片体验(图片滑动一半即可看到上一张是否选中) true or false
         .cropCompressQuality()// 裁剪压缩质量 默认90 int
         .minimumCompressSize(100)// 小于100kb的图片不压缩 
         .synOrAsy(true)//同步true或异步false 压缩 默认同步
         .cropWH()// 裁剪宽高比,设置如果大于图片本身宽高则无效 int 
         .rotateEnabled() // 裁剪是否可旋转图片 true or false
         .scaleEnabled()// 裁剪是否可放大缩小图片 true or false
         .videoQuality()// 视频录制质量 0 or 1 int
        .videoMaxSecond(15)// 显示多少秒以内的视频or音频也可适用 int 
        .videoMinSecond(10)// 显示多少秒以内的视频or音频也可适用 int 
        .recordVideoSecond()//视频秒数录制 默认60s int
        .isDragFrame(false)// 是否可拖动裁剪框(固定)
         .forResult(PictureConfig.CHOOSE_REQUEST);//结果回调onActivityResult code     
    private void initWidget() {
            FullyGridLayoutManager manager = new FullyGridLayoutManager(this, 3, GridLayoutManager.VERTICAL, false);
            mRecyclerView.setLayoutManager(manager);
            adapter = new GridImageAdapter(this, onAddPicClickListener);
            adapter.setList(selectList);
            adapter.setSelectMax(maxSelectNum);
            mRecyclerView.setAdapter(adapter);
            adapter.setOnItemClickListener(new GridImageAdapter.OnItemClickListener() {
                @Override
                public void onItemClick(int position, View v) {
                    if (selectList.size() > 0) {
                        LocalMedia media = selectList.get(position);
                        String pictureType = media.getPictureType();
                        int mediaType = PictureMimeType.pictureToVideo(pictureType);
                        switch (mediaType) {
                            case 1:
                                // 预览图片 可自定长按保存路径
                                //PictureSelector.create(MainActivity.this).externalPicturePreview(position, "/custom_file", selectList);
                                PictureSelector.create(MainActivity.this).externalPicturePreview(position, selectList);
                                break;
                            case 2:
                                // 预览视频
                                PictureSelector.create(MainActivity.this).externalPictureVideo(media.getPath());
                                break;
                            case 3:
                                // 预览音频
                                PictureSelector.create(MainActivity.this).externalPictureAudio(media.getPath());
                                break;
                        }
                    }
                }
            });
        }
    private void showPop() {
            View bottomView = View.inflate(MainActivity.this, R.layout.layout_bottom_dialog, null);
            TextView mAlbum = bottomView.findViewById(R.id.tv_album);
            TextView mCamera = bottomView.findViewById(R.id.tv_camera);
            TextView mCancel = bottomView.findViewById(R.id.tv_cancel);
    
            pop = new PopupWindow(bottomView, -1, -2);
            pop.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
            pop.setOutsideTouchable(true);
            pop.setFocusable(true);
            WindowManager.LayoutParams lp = getWindow().getAttributes();
            lp.alpha = 0.5f;
            getWindow().setAttributes(lp);
            pop.setOnDismissListener(new PopupWindow.OnDismissListener() {
    
                @Override
                public void onDismiss() {
                    WindowManager.LayoutParams lp = getWindow().getAttributes();
                    lp.alpha = 1f;
                    getWindow().setAttributes(lp);
                }
            });
            pop.setAnimationStyle(R.style.main_menu_photo_anim);
            pop.showAtLocation(getWindow().getDecorView(), Gravity.BOTTOM, 0, 0);
    
            View.OnClickListener clickListener = new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    switch (view.getId()) {
                        case R.id.tv_album:
                            //相册
                            PictureSelector.create(MainActivity.this)
                                    .openGallery(PictureMimeType.ofImage())
                                    .maxSelectNum(maxSelectNum)
                                    .minSelectNum(1)
                                    .imageSpanCount(4)
                                    .selectionMode(PictureConfig.MULTIPLE)
                                    .forResult(PictureConfig.CHOOSE_REQUEST);
                            break;
                        case R.id.tv_camera:
                            //拍照
                            PictureSelector.create(MainActivity.this)
                                    .openCamera(PictureMimeType.ofImage())
                                    .forResult(PictureConfig.CHOOSE_REQUEST);
                            break;
                        case R.id.tv_cancel:
                            //取消
                            //closePopupWindow();
                            break;
                    }
                    closePopupWindow();
                }
            };
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            List<LocalMedia> images;
            if (resultCode == RESULT_OK) {
                if (requestCode == PictureConfig.CHOOSE_REQUEST) {// 图片选择结果回调
    
                    images = PictureSelector.obtainMultipleResult(data);
                    selectList.addAll(images);
    
                    //selectList = PictureSelector.obtainMultipleResult(data);
    
                    // 例如 LocalMedia 里面返回三种path
                    // 1.media.getPath(); 为原图path
                    // 2.media.getCutPath();为裁剪后path,需判断media.isCut();是否为true
                    // 3.media.getCompressPath();为压缩后path,需判断media.isCompressed();是否为true
                    // 如果裁剪并压缩了,以取压缩路径为准,因为是先裁剪后压缩的
                    adapter.setList(selectList);
                    adapter.notifyDataSetChanged();
                }
            }
        }
  • 相关阅读:
    异常类
    设计模式
    java的参数传递
    meta 标签中 http-equiv 的作用
    导入CSV格式文件方法
    第四次博客作业-结对项目
    第九次作业-接口及接口回调
    第八次作业-继承
    软件工程第三次作业——关于软件质量保障初探
    Java第七次作业
  • 原文地址:https://www.cnblogs.com/hfy717/p/14904733.html
Copyright © 2011-2022 走看看