zoukankan      html  css  js  c++  java
  • Android选择多图上传

    大概是这么个效果,类似与微信朋友圈选择图片的效果,如下图所示

    首先,图片预览的这个界面我用的是GridView,当然也可以使用GridLayout,根据需求制定行列即可。同时重写适配器实现末尾是添加图片的ImageView,GridView的item可以用imageview,也可以用PhotoView,加载图片可以用Glide或者fresco.

    实现最后为添加图片的核心代码为:

      @Override
        public int getCount() {
            //mlist为图片源 ,+1为最后添加图片
    
            int count = mList == null ? 1 : mList.size() + 1;
            if (count > MAX_PICS) {   //MAX_PICS为图片数量限制
                return mList.size();
            } else {
                return count;
            }
        }        
       @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            convertView = inflater.inflate(R.layout.grid_item, parent,false);
            ImageView iv = (ImageView) convertView.findViewById(R.id.iv_pic);
            if (position < mList.size()) {
               //前面的正常加载图片 picUrl为图片路径
                String picUrl = mList.get(position); 
                Glide.with(mContext).load(picUrl).into(iv);
            } else {
                //最后一个显示添加图片按钮
                iv.setImageResource(R.mipmap.icon_add_pic);
            }
            return convertView;
        }            

    实现添加图片的功能需要使用到PictureSelector这个开源库,比较推荐这个的原因是因为通过配置一些参数可以非常方便的选择显示内容的类型,可以支持视频图片音频等,而且在他的文档中也提供了常见的异常的解决办法,通过结果回调就可以方便的获得图片的url了

      @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (resultCode == RESULT_OK) {
                switch (requestCode) {
                    case PictureConfig.CHOOSE_REQUEST:
                        // 图片、视频、音频选择结果回调
                        List<LocalMedia> 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();
                        break;
                }
            }
        }

    总体实现思路就是这样的了,目前使用情况正常,可以根据实际的需求做出相应的修改即可。

  • 相关阅读:
    Python3+Flask安装使用教程
    Linux getopt/getopts解析命令行参数教程
    Python3+unittest使用教程
    Python3+slowloris安装使用教程
    pytest pluggy.manager.PluginValidationError: unknown hook 'pytest_namespace'报错处理办法
    Python3+Django get/post请求实现教程
    Jenkins安装使用教程
    安全基线自动化扫描、生成报告、加固的实现(以Tomcat为例)
    Scratch安装使用教程
    从安装Mac OS X虚拟机到第一个IOS程序
  • 原文地址:https://www.cnblogs.com/yjpjy/p/10062154.html
Copyright © 2011-2022 走看看