Android自定义控件 漂亮的图片多选控件

漂亮的图片多选控件

《Android自定义控件 漂亮的图片多选控件》

对比了很多图片多选的控件,感觉都不太适合自己,灵活度较低,往往需要对源码做大量的修改,自己对其进行了简单的实现,来更好的适应多变的环境,本文暂时不讲原理和实现,之后会详细讲解,首先来讲解一下控件的使用。

Gradle

repositories { 
    maven { url "https://jitpack.io" }
}
dependencies {
    compile 'com.github.sd6352051:android-image-picker:v1.0.1'
}

如何使用

Step 0: 添加权限

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Step 2: 添加控件的根布局

提供一个ViewGroup id 可以随意定义,之后绑定时需要用到

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <FrameLayout
        android:id="@+id/gallery_root"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />
</RelativeLayout>      

Step 3: 在你的activity中调用此方法attachFragment(R.id.gallery_root)

  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        attachFragment(R.id.gallery_root);
    }

Step 4: 实现接口

  @Override
    public Configuration getConfiguration() {
        //返回控件配置
        Configuration cfg=new Configuration.Builder()
                .build();
        return cfg;
    }

    @Override
    public List<PhotoEntry> getSelectPhotos() {
        //返回当前已经选中的图片 没有是返回null
        return mSelectedPhotos;
    }

    @Override
    public void onSelectedCountChanged(int count) {
        //这个方法将在你图选择发生变化时调用 
        // count:当前被选中图像数量
    }

    @Override
    public void onAlbumChanged(String name) {
        //这个方法将在相册选择发生变化时调用
        //name:当前选中的相册名称
    }

    @Override
    public void onTakePhoto(PhotoEntry entry) {
        //这个方法将在你拍照后调用
        //entry:返回拍照后的图片信息
    }

    @Override
    public void onChoosePhotos(List<PhotoEntry> entries) {
        //这个方法将在你调用 sendPhotos() 方法后调用
        //entries:返回你选中的图片信息
    }

    @Override
    public void onPhotoClick(PhotoEntry entry) {
        //这个方法将在你点击图像时调用,如果configuration hasPreview(false)时 将不回调此方法
        //entry: 返回当前点击的图像信息
    }

Step 5: 其他方法

openAlbum(): 打开相册弹窗

sendPhotos(): 这个方法将会被调用 onChoosePhotos(List<PhotoEntry> entries)

配置项

默认配置

Configuration cfg=new Configuration.Builder()
                //是否包含相机按钮
                .hasCamera(true)
                //图片选中后是否包含一个浮层
                .hasShade(true)
                //是否包含图像预览功能,为false时点击图像将执行反选效果,true则会调用onPhotoClick方法
                .hasPreview(true)
                //GridView间隔
                .setSpaceSize(4)
                //图像最大宽度
                .setPhotoMaxWidth(120)
                //Checkbox 背景色
                .setCheckBoxColor(0xFF3F51B5)
                //相册弹出默认高度
                .setDialogHeight(Configuration.DIALOG_HALF)
                //相册模式  DIALOG_GRID  网格形式  DIALOG_LIST 列表形式
                .setDialogMode(Configuration.DIALOG_GRID)
                //图像最大选中
                .setMaximum(9)
                //图像达到最大选中时的提示
                .setTip(null)
                //相册标题
                .setAblumsTitle(null)
                .build();

详细

该控件只提供了基础的图片多选功能,我可以在自己的activity中通过attachFragment(R.id.gallery_root);来完成绑定 即可显示图片选择控件,
通过调用openAlbum()方法来打开相册,通过我们实现的一系列回调方法来获取需要的大多数据,当图片选择完成后调用sendPhotos()方法即可在onChoosePhotos方法中获取到我们选择的详细图片信息,获取到需要的数据后即可通过 activityonActivityResult 或者 eventbus 及类似控件来传递数据 ,下面介绍一下实现的回调接口的作用。

  • 1 getConfiguration : 获取配置信息,可以高度的定义控件的属性,上面有详细讲到每个属性的作用。
  • 2 getSelectPhotos: 当前已经选中的图片,例如我们第一次选择了3张,但我们还要继续选择,下次选择就需要携带上一次选中的3张图片的信息。
  • 3 onSelectedCountChanged:当被选中的图像数量发生改变将调用此方法,大部分情况我们的界面上可能需要显示当前选中的数量,可以在此做跟新
  • 4 onAlbumChanged: 当相册名称发生变化将调用次方法,如果你的界面需要此信息,可以在此获取
  • 5 onTakePhoto: 当拍照完成后会调用次方法,可以在此获取的刚拍的照片信息,例如我们通常会在此关闭当前activiy,传递图像信息等。
  • 6 onChoosePhotos:此回调需要手动调用sendPhotos触发,将得到当前选中的所有图片信息,例如通常会在此关闭当前图片选中activity,传递信息到需要的地方
  • 7 onPhotoClick:此回调会受 配置项中hasPreview 影响,为false时将不执行此回调,通常我们会增加图片的浏览功能可以使用photoview或其他控件,当点击图像,就可以在此接口中获取点击图像的信息。

可以通过配置项来充分的达到理想的效果,例如通过setDialogMode(Configuration.DIALOG_GRID or Configuration.DIALOG_LIST) 来改变相册集的布局方式

《Android自定义控件 漂亮的图片多选控件》

查看示例代码

下载示例应用

Github 欢迎 star follow

    原文作者:李涛丶
    原文地址: https://www.jianshu.com/p/512478d44b67
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞