美文网首页AndroidAndroid资料View
Android自定义控件 漂亮的图片多选控件

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

作者: litao0621 | 来源:发表于2016-05-04 19:51 被阅读4331次

    漂亮的图片多选控件


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

    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) 来改变相册集的布局方式

    查看示例代码

    下载示例应用

    Github 欢迎 star follow

    相关文章

      网友评论

      本文标题:Android自定义控件 漂亮的图片多选控件

      本文链接:https://www.haomeiwen.com/subject/crarrttx.html