实现效果
--------------------------------------------------------------------------------------------------------------------
请在Github下查阅用法(最新更新和用法都在github上第一时间更新):
--------------------------------------------------------------------------------------------------------------------
Android-ImagesPickers是一个集图片选择(单选/多选)、拍照、裁剪、图片预览、图片显示容器的图片选择显示工具。使用方便,开发者仅需要几行的代码就可以集成Android整套图片“选裁显删”功能,可以通过设置参数选择自己想要使用的功能,Android-ImagesPickers自身并没有强制绑定某个图片加载器(如UIL,Glide,Fresco,Picasso),开发者可以根据自己项目需求给Android-ImagesPickers配置图片加载器。
也许有人会问:系统不是自带相册选择器吗,为什么还有做一个图片选择器呢,有必要吗?我告诉你很有必要。微信,QQ等等App它们都是自己带图片选择器,并没有直接调系统的图片选择器。为什么要这么做呢?我总结出以下几点,使用本图片选择器下面的问题你都不用考虑,就是这么的任性:
· 最大的问题就是兼容性了,手机厂商那么多,相册软件那么多从而引起各种奇葩的问题
· 有些手机拍照图片倒立情况(如三星和魅族)
· 拿到的bitmap或uri为空
· 非常频繁出现OOM
· 不支持多选
· 拍照/选择图片/裁剪视乎用起来有些麻烦,加上处理一些旋转、裁剪、压缩就更加麻烦了,代码多得不行不行的。
· 系统的图片选择UI上与自己APP样式不统一
· 有些不支持图片旋转
· ....
下面的Demo图片按显示顺序:
· 图片裁剪
· 图片预览
· 图片容器
· 图片容器带删除
· 图片容器自定义每行数量
-
-
- allprojects {
- repositories {
- jcenter()
- }
- }
-
-
- dependencies {
- compile 'com.jaikydota.imagespickers:imagespickers:1.0.6'
-
-
- compile 'com.github.bumptech.glide:glide:3.6.1'
- }
二:在 AndroidManifest.xml 中 添加 如下权限
-
- <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
-
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
三:创建图片加载器 (其中可以按照 喜好 使用不同的 第三方图片加载框架 以下为Glide示例)
- public class GlideLoader implements ImageLoader {
-
- @Override
- public void displayImage(Context context, String path, ImageView imageView) {
- Glide.with(context)
- .load(path)
- .placeholder(com.jaiky.imagespickers.R.drawable.global_img_default)
- .centerCrop()
- .into(imageView);
- }
-
- }
四:配置 ImageConfig
UI 视图配置
- 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))
- .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()
-
- .mutiSelectMaxSize(9)
-
- .showCamera()
-
- .pathList(path)
-
- .filePath("/temp/picture")
- .build();
-
-
- mageSelector.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()
-
- .filePath("/temp/picture")
- .build();
-
-
- mageSelector.open(MainActivity.this, imageConfig);
单选1:1便捷裁剪
-
-
-
-
- .setContainer(ViewGroup container)
容器自定义每行显示数量和是否删除
-
-
- .setContainer(linearLayout, 6, true)
关闭图片预览
五:在 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) {
-
- List<String> pathList = data.getStringArrayListExtra(ImageSelectorActivity.EXTRA_RESULT);
-
- for (String path : pathList) {
- Log.i("ImagePath", 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;
-
- private ImageConfig imageConfig;
-
- private LinearLayout llContainer;
-
- @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);
- llContainer = (LinearLayout) findViewById(R.id.llContainer);
- btn1.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- 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()
-
-
-
- .showCamera()
-
- .setContainer(llContainer)
- .requestCode(REQUEST_CODE)
- .build();
- ImageSelector.open(MainActivity.this, imageConfig);
- }
- });
- btn2.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- 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))
-
- .mutiSelect()
-
- .mutiSelectMaxSize(9)
-
- .setContainer(llContainer, 4, true)
-
- .pathList(path)
-
- .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);
- tv1.append("\n");
- }
-
- path.clear();
- path.addAll(pathList);
- }
- }
- }
--------------------------------------------------------------------------------------------------------------------
查看及获取源代码:
--------------------------------------------------------------------------------------------------------------------