Android实现选择相册图片---类似微信的选择图片页面

该博客介绍了如何在Android应用中实现一个图片选择器,包括从相册选择和拍照功能。用户可以指定是否显示拍照选项及最大选择图片数量。在PhotoPickerActivity中,通过Intent传递参数并初始化界面,使用GridView展示图片,同时支持切换文件夹列表。当用户选择图片后,将结果返回到上一级Activity。

1.实现图

 

2.实现过程

(1)图片选择页面是另外一个activity,点击图片选择之后跳转至选择图片的activity

(2)可以指定是否可以拍照和最大的选择图片数量

(3)这里主要就是实现PhotoPickerActivity

3.代码

当前activity:

  Intent intent = new Intent(MyResourceActivity.this, PhotoPickerActivity.class);
                            intent.putExtra(PhotoPickerActivity.EXTRA_SHOW_CAMERA, false); //是否使用拍照功能
                            intent.putExtra(PhotoPickerActivity.EXTRA_SELECT_MODE, 1);     //选择图片的样式
                            intent.putExtra(PhotoPickerActivity.EXTRA_MAX_MUN, 100);       //最大的图片数量
                            startActivityForResult(intent, REQUEST_CODE_PICK_PHOTO );

PhotoPickerActivity实现

public class PhotoPickerActivity extends Activity implements PhotoAdapter.PhotoClickCallBack {

    public final static String TAG = "PhotoPickerActivity";

    public final static String KEY_RESULT = "picker_result";
    public final static int REQUEST_CAMERA = 1;

    /**
     * 是否显示相机
     */
    public final static String EXTRA_SHOW_CAMERA = "is_show_camera";
    /**
     * 照片选择模式
     */
    public final static String EXTRA_SELECT_MODE = "select_mode";
    /**
     * 最大选择数量
     */
    public final static String EXTRA_MAX_MUN = "max_num";
    /**
     * 单选
     */
    public final static int MODE_SINGLE = 0;
    /**
     * 多选
     */
    public final static int MODE_MULTI = 1;
    /**
     * 默认最大选择数量
     */
    public final static int DEFAULT_NUM = 9;

    private final static String ALL_PHOTO = "所有图片";
    /**
     * 文件夹列表是否处于显示状态
     */
    boolean mIsFolderViewShow = false;
    /**
     * 文件夹列表是否被初始化,确保只被初始化一次
     */
    boolean mIsFolderViewInit = false;
    /**
     * 初始化文件夹列表的显示隐藏动画
     */
    AnimatorSet inAnimatorSet = new AnimatorSet();
    AnimatorSet outAnimatorSet = new AnimatorSet();
    /**
     * 是否显示相机,默认不显示
     */
    private boolean mIsShowCamera = false;
    /**
     * 照片选择模式,默认是单选模式
     */
    private int mSelectMode = 0;
    /**
     * 最大选择数量,仅多选模式有用
     */
    private int mMaxNum;
    private GridView mGridView;
    private Map<String, PhotoFolder> mFolderMap;
    private List<Photo> mPhotoLists = new ArrayList<>();
    private ArrayList<String> mSelectList = new ArrayList<>();
    private PhotoAdapter mPhotoAdapter;
    private ProgressDialog mProgressDialog;
    private ListView mFolderListView;
    private TextView mPhotoNumTV;
    private TextView mPhotoNameTV;
    private Button mCommitBtn;
    /**
     * 拍照时存储拍照结果的临时文件
     */
    private File mTmpFile;
    /**
     * 获取照片的异步任务
     */
    private AsyncTask getPhotosTask = new AsyncTask() {
        @Override
        protected void onPreExecute() {
            mProgressDialog = ProgressDialog.show(PhotoPickerActivity.this, null, "loading...");
        }

        @Override
        protected Object doInBackground(Object[] params) {
            mFolderMap = PhotoUtils.getPhotos(
                    PhotoPickerActivity.this.getApplicationContext());
            return null;
        }

        @Override
        protected void onPostExecute(Object o) {
            getPhotosSuccess();
        }
    };

    @Override
    protected voi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值