AndroidAndroid资料View

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

2016-05-04  本文已影响4331人  litao0621

漂亮的图片多选控件


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

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 及类似控件来传递数据 ,下面介绍一下实现的回调接口的作用。

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

查看示例代码

下载示例应用

Github 欢迎 star follow

上一篇 下一篇

猜你喜欢

热点阅读