android仿微信图片视频选择器,视频图片选择分离。视频选择一个图片选择9个。

先上效果图,无图无真相,如果是你需要的,那么继续往下看。

下面我将分两块给大家讲一下怎么解决的问题。

      第一块就是快速定位问题所在,并解决选择问题。

      第二块就是按照思路来定位问题,然后给大家11讲解解决步骤。毕竟授人鱼不如授人以渔

第一块

1.先去git上下载大神的项目,git地址

https://github.com/LuckSiege/PictureSelector

2.下载完成过后,运行这个demo,为什么推荐这个作者的demo?

  答:因为作者已经帮我们实现好了动态添加的效果,不需要我们再去写一遍,哈哈哈(懒)。

3.找到PictureSelectorActivity文件,在文件中大概866行中添加我框框里面的代码即可。

4.代码如下:

//判断是否是视频 方法1。拿到选中的第一个,然后通过系统写的样式判断他的类型。
                int pt = PictureMimeType.isPictureType(selectImages.get(0).getPictureType());
                if (pt==PictureConfig.TYPE_VIDEO){
                    Log.d(TAG, "changeImageNumber: 选择了视频");
                    adapter.maxSelectNum=1;
                }else if (pt==PictureConfig.TYPE_IMAGE){
                    Log.d(TAG, "changeImageNumber: 选择了图片");
                }

5.不出意外的话adapter.maxSelectNum这里会报错,因为adapter设置的是私有,将他改成public即可。

6.好了问题解决了,该干嘛干嘛去。如果很懵逼想了解怎么定位的问题那么继续往下来咯。

第二块

1.先去git上下载大神的项目,git地址

https://github.com/LuckSiege/PictureSelector

2.下载完成过后,运行这个demo,为什么推荐这个作者的demo?

  答:因为作者已经帮我们实现好了动态添加的效果,不需要我们再去写一遍,哈哈哈(懒)。

3.博主bb

大家可能觉得别人的git你拿出来发博客,怕是**吧,但是大家仔细看看当前项目的调用,是不是只有有个最大选择数量,而没有单独的视频选择多少和图片又选择多少。而我改动部分源码就是为了这个效果,而且这个项目真的很完美了,我在锦上添花应该还是可以满足部分做社交朋友的需求吧。废话不多说了开始说正事了。

4.定位问题

第一步我们先要判断用户选择的是图片还是视频,这很关键,不然我们就没办法做后续的工作了,鄙人经过1天的摸索(主要是菜)定位了哪里判断是否选中。我先不说定位的位置,大家可以先按照我的思路尝试一下解决问题,既然要判断选中那么我们先打开作者的demo点击添加,添加前和添加后是不是又变化,先上图看看,这是没选择时和选择后两张图:

          

应该不难看出右下角发现了明显的变化,比如字变了呀0.0.。那好就从这个地方下手,先找到这个布局文件然后找到他的activity,上面也提到了是PictureSelectorActivity。定位了activity后,我们就在这个里面找文字更改的地方,跟着textview的id找一会儿就能找到,用ctrl+f,搜索即可。发现他在方法这个方法里如图:

好了找了他过后

picture_tv_ok.setText(getString(R.string.picture_completed));

就在这段代码的上面或者下面做操作,别出了if的判断语句就行。

5.判断视频、音频、图片

  既然知道了用户选择的触发事件地点,那么就要判断选择的到底是视频还是图片啊,博主这个榆木脑袋想了很久和尝试,总算偶然机会发现了怎么判断前后总结了两个方法(最终采取了第二个方法)。

  方法1:在选中这个方法里面,大家有没有注意到方法里的参数如图

其实这个参数里面就是我们要解决的问题所在,比如他有一个获取路径方法如图:

 

当时想的就是先将路径拿到然后根据文件的后缀名来判断是否是视频或者图片。

既然要判断类型,那么第一个选择就很重要了,还是回到选中的这个方法里面来。第一个选择也就是这个List集合的下标为0,那么判断路径的代码就是:

    selectImages.get(0).getPath());

 记得写在picture_tv_ok.setText(getString(R.string.picture_completed));的前面或者后面。然后通过log打印一下日志,你就会发现每次选中都会有你第一次选中的路径。如图:

 第一个方法就这样,主要是通过后缀名来判断用户选择的是图片还是视频,然后在对其进行选择数量的更改,选择数量在后面在提到。

  方法2:在实现第一个方法的时候,因为博主懒,没错是懒,记得之前在查看怎么判断视频和图片的时候git作者好像已经为我们写好了,然后就当然拿过来用啦。

  在PictureMimeType.java文件里面有个isPictureType方法,他就是用来判断选择的类型的,如图:

返回值就代表着选中的类型,这里有图片、视频和音频的判断。

那么我们现在就可以开始使用啦,判断第一个选中的到底是什么类型来进行操作。代码如下:

//判断是否是视频 方法1。拿到选中的第一个,然后通过系统写的样式判断他的类型。
                int pt = PictureMimeType.isPictureType(selectImages.get(0).getPictureType());
                if (pt==PictureConfig.TYPE_VIDEO){
                    Log.d(TAG, "changeImageNumber: 选择了视频");
           
                }else if (pt==PictureConfig.TYPE_IMAGE){
                    Log.d(TAG, "changeImageNumber: 选择了图片");
                }

通过log打印一边你就知道是不是对的咯。

6.单独的给图片和视频设置最大的选择数量

现在既然定位也做了,也判断了类型,还差的就是单独的设置选中的数量,这个博主实践了半天都tm不行啊,毕竟如假包换的榆木脑壳可不是盖的。我看了MainActivity里面的调用,发现最后还是adpater里面有个方法入:

adapter.setSelectMax(maxSelectNum);

这里才是真正用来设置选中的数量的,然后开心的跑到PictureSelectorActivity文件里面也发现了一个adpater,哈哈哈没笑过3秒,发现不是同一个adpater。然后就点进去该adapter看发现里面其实也是有一个最大选择数量,如图:

只能在这里下文章了,现在他是私有的,要想在PictureSelectorActivity里面调用他,那么先的将他设置为public才行。设置完成过后,就拿去调用了。比如我现在视频想选择1个,图片想选择4张,那么下面代码就可以解决:

//判断是否是视频 方法1。拿到选中的第一个,然后通过系统写的样式判断他的类型。
                int pt = PictureMimeType.isPictureType(selectImages.get(0).getPictureType());
                if (pt==PictureConfig.TYPE_VIDEO){
                    Log.d(TAG, "changeImageNumber: 选择了视频");
                    adapter.maxSelectNum=1;
                }else if (pt==PictureConfig.TYPE_IMAGE){
                    Log.d(TAG, "changeImageNumber: 选择了图片");
                    adapter.maxSelectNum=4;
                }

在该框架的调用过程中是可以动态的设置最大数量的,如:

所以说想如果只想单独改视频的选择数量,那就在视频类型中用adapter.maxSelectNum即可,而图片就可以直接在框架里面改就行。

总结:通过定位问题的位置,然后再到类型的判断,最后在对不同的类型就行不同的处理即可。

如果您觉得这篇文章对您有用!那不妨请博主喝杯可乐可好!

          

发布了29 篇原创文章 · 获赞 44 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/ai1362425349/article/details/102795097