代码拉取完成,页面将自动刷新
Android自定义相册,实现了拍照、图片选择(单选/多选)、 裁剪 、旋转等功能。
对于Android Studio(建议用3.0版本+)的用户,可以选择添加:
api 'com.cysion:ImagePicker:1.0.7'
//若使用androidx,则需要这样添加依赖:
api 'com.cysion:ImagePicker:1.0.7.x'
对于Android Studio(建议用3.0版本+)的用户,可以选择添加:
api 'com.cysion:ImagePicker:1.0.7'
//若使用androidx,则需要这样添加依赖:
api 'com.cysion:ImagePicker:1.0.7.x'
---
//若出现Failed to resolve: com.github.chrisbanes:PhotoView的问题,
//则应在项目的build.gradle添加如下:
maven{url"https://jitpack.io"}
---
//若出现依赖重复问题,可以这样;
api('com.cysion:ImagePicker:1.0.7'){
exclude group: 'com.android.support'
}
配置参数 | 参数含义 |
---|---|
multiMode | 图片选着模式,单选/多选 |
selectLimit | 多选限制数量,默认为9 |
showCamera | 选择照片时是否显示拍照按钮 |
crop | 是否允许裁剪(单选有效) |
isFreeCrop | 是否允许自由裁剪(单选有效,默认FREE,自由比例)新版本添加,推荐使用,会覆盖crop |
style | 有裁剪时,裁剪框是矩形还是圆形 |
focusWidth | 矩形裁剪框宽度(圆形自动取宽高最小值) |
focusHeight | 矩形裁剪框高度(圆形自动取宽高最小值) |
outPutX | 裁剪后需要保存的图片宽度 |
outPutY | 裁剪后需要保存的图片高度 |
isSaveRectangle | 裁剪后的图片是按矩形区域保存还是裁剪框的形状,例如圆形裁剪的时候,该参数给true,那么保存的图片是矩形区域,如果该参数给fale,保存的图片是圆形区域 |
imageLoader | 需要使用的图片加载器,自需要实现ImageLoader接口即可,推荐glide |
更多使用,请下载demo参看源代码
com.lzy.imagepicker.loader.ImageLoader
这个接口,实现其中的方法,比如以下代码是使用 Picasso
三方加载库实现的public class PicassoImageLoader implements ImageLoader {
@Override
public void displayImage(Activity activity, String path, ImageView imageView, int width, int height) {
Picasso.with(activity)//
.load(Uri.fromFile(new File(path)))//
.placeholder(R.mipmap.default_image)//
.error(R.mipmap.default_image)//
.resize(width, height)//
.centerInside()//
.memoryPolicy(MemoryPolicy.NO_CACHE, MemoryPolicy.NO_STORE)//
.into(imageView);
}
@Override
public void clearMemoryCache() {
//这里是清除缓存的方法,根据需要自己实现
}
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_image_picker);
ImagePicker imagePicker = ImagePicker.getInstance();
imagePicker.setImageLoader(new PicassoImageLoader()); //设置图片加载器
imagePicker.setShowCamera(true); //显示拍照按钮
imagePicker.setCrop(true); //允许裁剪(单选才有效)
imagePicker.setFreeCrop(true, FreeCropImageView.CropMode.FREE);//新版添加,自由裁剪,优先于setCrop
imagePicker.setSaveRectangle(true); //是否按矩形区域保存
imagePicker.setSelectLimit(9); //选中数量限制
imagePicker.setStyle(CropImageView.Style.RECTANGLE); //裁剪框的形状
imagePicker.setFocusWidth(800); //裁剪框的宽度。单位像素(圆形自动取宽高最小值)
imagePicker.setFocusHeight(800); //裁剪框的高度。单位像素(圆形自动取宽高最小值)
imagePicker.setOutPutX(1000);//保存文件的宽度。单位像素
imagePicker.setOutPutY(1000);//保存文件的高度。单位像素
imagePicker.setIToaster(this, new InnerToaster.IToaster());//设置吐司代理,保持lib与app中吐司风格一致
}
public void onClick(View v) {
Intent intent = new Intent(this, ImageGridActivity.class);
startActivityForResult(intent, IMAGE_PICKER);
}
}
//1.0.5版本加入了更明确的权限申请,解决原程序直接打开拍照可能出现没数据的情况
Intent intent = new Intent(this, ImageGridActivity.class);
intent.putExtra(ImageGridActivity.EXTRAS_TAKE_PICKERS,true); // 是否是直接打开相机
startActivityForResult(intent, REQUEST_CODE_SELECT);
//若拍照之后需要裁剪,则在使用前,需要关闭多选模式,支持裁剪
ImagePicker.getInstance().setMultiMode(false);
ImagePicker.getInstance().setFreeCrop(true, FreeCropImageView.CropMode.FREE);
...
onActivityResult
方法,回调结果@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == ImagePicker.RESULT_CODE_ITEMS) {
if (data != null && requestCode == IMAGE_PICKER) {
ArrayList<ImageItem> images = (ArrayList<ImageItem>) data.getSerializableExtra(ImagePicker.EXTRA_RESULT_ITEMS);
MyAdapter adapter = new MyAdapter(images);
gridView.setAdapter(adapter);
} else {
Toast.makeText(this, "没有数据", Toast.LENGTH_SHORT).show();
}
}
}
V1.0.7
V1.0.6
V1.0.5
V1.0.1
V1.0.0
V 0.6.1
V 0.6.0
V 0.5.5
V 0.5.4
V 0.5.3
V 0.5.1
V 0.5.0
V 0.4.8
V 0.4.7
V 0.3.5
Copyright 2016 jeasonlzy(廖子尧),2019 CysionLiu
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。