首页 > 代码库 > Android实用视图动画及工具系列之九:漂亮的图片选择器,高性能防崩溃图片选择工具
Android实用视图动画及工具系列之九:漂亮的图片选择器,高性能防崩溃图片选择工具
实现效果
功能说明
Andorid-ImagesPickers是一个图片选择(单选/多选)、拍照、裁剪的图片选择器。使用方便,功能可自己配置,Andorid-ImagesPickers自身并没有强制绑定某个ImageLoader,开发者可以根据自己项目给Andorid-ImagesPickers配置图片加载器。
也许有人会问:系统不是有相册选择器吗,为什么还有做一个图片选择器呢,有必要吗?我告诉你很有必要。微信,QQ等等App它们都是自己带图片选择器,并没有直接调系统的图片选择器。为什么要这么做呢?我总结出一下几点:
· 最大的问题就是兼容性了,手机厂商那么多,相册软件那么多从而引起各种奇葩的问题
· 有些手机拍照图片倒立情况(如三星和魅族)
· 拿到的bitmap或uri为空
· 非常频繁出现OOM
· 不支持多选
· 拍照/选择图片/裁剪视乎用起来有些麻烦,加上处理一些旋转、裁剪、压缩就更加麻烦了,代码多得不行不行的。
· 系统的图片选择UI上与自己APP样式不统一
· 有些不支持图片旋转
· ....
使用本图片选择器以上问题你都不用考虑,就是这么的任性。
· 最大的问题就是兼容性了,手机厂商那么多,相册软件那么多从而引起各种奇葩的问题
· 有些手机拍照图片倒立情况(如三星和魅族)
· 拿到的bitmap或uri为空
· 非常频繁出现OOM
· 不支持多选
· 拍照/选择图片/裁剪视乎用起来有些麻烦,加上处理一些旋转、裁剪、压缩就更加麻烦了,代码多得不行不行的。
· 系统的图片选择UI上与自己APP样式不统一
· 有些不支持图片旋转
· ....
使用本图片选择器以上问题你都不用考虑,就是这么的任性。
如何部署
一:通过Gradle抓取
dependencies { }
二:在 AndroidManifest.xml 中 添加 如下权限
<!-- 从sdcard中读取数据的权限 --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- 往sdcard中写入数据的权限 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
三:创建 图片加载器 (其中可以按照 喜好 使用不同的 第三方图片加载框架 以下为Glide示例)
public class GlideLoader implements com.yancy.imageselector.ImageLoader { @Override public void displayImage(Context context, String path, ImageView imageView) { Glide.with(context) .load(path) .placeholder(com.yancy.imageselector.R.mipmap.imageselector_photo) .centerCrop() .into(imageView); } }
四:配置 ImageConfig
UI 视图配置
ImageConfig imageConfig = new ImageConfig.Builder(new GlideLoader()) // 如果在 4.4 以上,则修改状态栏颜色 (默认黑色) .steepToolBarColor(getResources().getColor(R.color.blue)) // 标题的背景颜色 (默认黑色) .titleBgColor(getResources().getColor(R.color.blue)) // 提交按钮字体的颜色 (默认白色) .titleSubmitTextColor(getResources().getColor(R.color.white)) // 标题颜色 (默认白色) .titleTextColor(getResources().getColor(R.color.white)) .build();多选
ImageConfig imageConfig = new ImageConfig.Builder(new GlideLoader()) .steepToolBarColor(getResources().getColor(R.color.blue)) .titleBgColor(getResources().getColor(R.color.blue)) .titleSubmitTextColor(getResources().getColor(R.color.white)) .titleTextColor(getResources().getColor(R.color.white)) // 开启多选 (默认为多选) .mutiSelect() // 多选时的最大数量 (默认 9 张) .mutiSelectMaxSize(9) // 开启拍照功能 (默认关闭) .showCamera() // 已选择的图片路径 .pathList(path) // 拍照后存放的图片路径(默认 /temp/picture) (会自动创建) .filePath("/ImageSelector/Pictures") .build(); ImageSelector.open(MainActivity.this, imageConfig); // 开启图片选择器单选
ImageConfig imageConfig = new ImageConfig.Builder(new GlideLoader()) .steepToolBarColor(getResources().getColor(R.color.blue)) .titleBgColor(getResources().getColor(R.color.blue)) .titleSubmitTextColor(getResources().getColor(R.color.white)) .titleTextColor(getResources().getColor(R.color.white)) // 开启单选 (默认为多选) .singleSelect() // 开启拍照功能 (默认关闭) .showCamera() // 拍照后存放的图片路径(默认 /temp/picture) (会自动创建) .filePath("/ImageSelector/Pictures") .build(); ImageSelector.open(MainActivity.this, imageConfig); // 开启图片选择器单选1:1便捷截图
ImageConfig imageConfig = new ImageConfig.Builder(new GlideLoader()) .steepToolBarColor(getResources().getColor(R.color.blue)) .titleBgColor(getResources().getColor(R.color.blue)) .titleSubmitTextColor(getResources().getColor(R.color.white)) .titleTextColor(getResources().getColor(R.color.white)) // (截图默认配置:关闭 比例 1:1 输出分辨率 500*500) .crop() // 开启单选 (默认为多选) .singleSelect() // 开启拍照功能 (默认关闭) .showCamera() // 拍照后存放的图片路径(默认 /temp/picture) (会自动创建) .filePath("/ImageSelector/Pictures") .build(); ImageSelector.open(MainActivity.this, imageConfig); // 开启图片选择器单选自定义截图
ImageConfig imageConfig = new ImageConfig.Builder(new GlideLoader()) .steepToolBarColor(getResources().getColor(R.color.blue)) .titleBgColor(getResources().getColor(R.color.blue)) .titleSubmitTextColor(getResources().getColor(R.color.white)) .titleTextColor(getResources().getColor(R.color.white)) // (截图默认配置:关闭 比例 1:1 输出分辨率 500*500) .crop(1, 2, 500, 1000) // 开启单选 (默认为多选) .singleSelect() // 开启拍照功能 (默认关闭) .showCamera() // 拍照后存放的图片路径(默认 /temp/picture) (会自动创建) .filePath("/ImageSelector/Pictures") .build(); ImageSelector.open(MainActivity.this, imageConfig); // 开启图片选择器
五:在 onActivityResult 中获取选中的照片路径 数组 :
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == ImageSelector.IMAGE_REQUEST_CODE && resultCode == RESULT_OK && data != null) { // Get Image Path List List<String> pathList = data.getStringArrayListExtra(ImageSelectorActivity.EXTRA_RESULT); for (String path : pathList) { Log.i("ImagePathList", path); } } }代码示例:
public class MainActivity extends AppCompatActivity { private Button btn1, btn2; private TextView tv1; private ArrayList<String> path = new ArrayList<>(); public static final int REQUEST_CODE = 123; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn1 = (Button) findViewById(R.id.btn1); btn2 = (Button) findViewById(R.id.btn2); tv1 = (TextView) findViewById(R.id.tv1); //单选 btn1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ImageConfig imageConfig = new ImageConfig.Builder( new GlideLoader()) .steepToolBarColor(getResources().getColor(R.color.titleBlue)) .titleBgColor(getResources().getColor(R.color.titleBlue)) .titleSubmitTextColor(getResources().getColor(R.color.white)) .titleTextColor(getResources().getColor(R.color.white)) // 开启单选 (默认为多选) (单选 为 singleSelect) .singleSelect() //.crop() // 开启拍照功能 (默认开启) //.showCamera() .requestCode(REQUEST_CODE) .build(); ImageSelector.open(MainActivity.this, imageConfig); } }); //多选 btn2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ImageConfig imageConfig = new ImageConfig.Builder( // GlideLoader 可用自己用的缓存库 new GlideLoader()) // 如果在 4.4 以上,则修改状态栏颜色 (默认黑色) .steepToolBarColor(getResources().getColor(R.color.titleBlue)) // 标题的背景颜色 (默认黑色) .titleBgColor(getResources().getColor(R.color.titleBlue)) // 提交按钮字体的颜色 (默认白色) .titleSubmitTextColor(getResources().getColor(R.color.white)) // 标题颜色 (默认白色) .titleTextColor(getResources().getColor(R.color.white)) // 开启多选 (默认为多选) (单选 为 singleSelect) //.singleSelect() //裁剪 //.crop() // 多选时的最大数量 (默认 9 张) .mutiSelectMaxSize(9) // 已选择的图片路径 .pathList(path) // 拍照后存放的图片路径(默认 /temp/picture) .filePath("/temp") // 开启拍照功能 (默认开启) .showCamera() .requestCode(REQUEST_CODE) .build(); ImageSelector.open(MainActivity.this, imageConfig); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CODE && resultCode == RESULT_OK && data != null) { List<String> pathList = data.getStringArrayListExtra(ImageSelectorActivity.EXTRA_RESULT); tv1.setText(""); for (String path : pathList) { tv1.append(path); } path.clear(); path.addAll(pathList); } } }
--------------------------------------------------------------------------------------------------------------------
查看及获取源代码:
https://github.com/jaikydota/Andorid-ImagesPickers
--------------------------------------------------------------------------------------------------------------------
声明
欢迎转载,但请保留文章原始出处
作者:Jaiky_杰哥
出处:http://blog.csdn.net/jaikydota163/article/details/52098880
Android实用视图动画及工具系列之九:漂亮的图片选择器,高性能防崩溃图片选择工具
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。