下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】Android中怎么自定义一个图片选择器
本篇文章为大家展示了Android中怎么自定义一个图片选择器,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。步骤1:动态申请权限private
boolean
permissionOpen()
{
if
(ContextCompat.checkSelfPermission(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)
!=
PackageManager.PERMISSION_GRANTED)
{//动态申请读写权限
ActivityCompat.requestPermissions(this,
new
String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
101);
}
else
{
getImages();//有权限的话直接去获取手机图片
return
true;
}
return
false;
}@Override
public
void
onRequestPermissionsResult(int
requestCode,
@NonNull
String[]
permissions,
@NonNull
int[]
grantResults)
{
if
(requestCode
==
101)
{
if
(grantResults[0]
==
PackageManager.PERMISSION_GRANTED)
{
getImages();//申请权限成功之后,去获取手机图片
}
else
{
Toast.makeText(this,
"权限申请失败",
Toast.LENGTH_LONG).show();
}
return;
}
super.onRequestPermissionsResult(requestCode,
permissions,
grantResults);
}步骤2:给手机图片做一个模型,我的想法是以每一个放图片的文件夹为一个模型,说通俗点,A文件夹下边有3张图片a.jpg,b.jpg,c.jpg,B文件夹下有2张图片,d.jhpg,e.jpg,我就给A和B等等这种文件夹做一个模型public
class
PictureBean
{//我的想法是以每一个放图片的文件夹为一个模型
private
String
name;//文件夹的名字,以后会用到,具体用处可以先打开微信的图片选择器,点左下角视频和图片,弹出一个popupwindow,每一个item都有一个name,他这个name应该是图片父目录的文件名,我这个name也是这个意思,不过这篇博客应该暂时用不到
private
int
number;//这个文件夹下图片的数量
private
String
firstImageUrl;//这个文件夹下的第一张图片
private
List<String>
imageList;//这个文件夹下的图片集合
private
String
parentPath;//这个文件夹的绝对路径
public
String
getParentPath()
{
return
parentPath;
}
public
void
setParentPath(String
parentPath)
{
this.parentPath
=
parentPath;
}
public
String
getName()
{
return
name;
}
public
void
setName(String
name)
{
=
name;
}
public
int
getNumber()
{
return
number;
}
public
void
setNumber(int
number)
{
this.number
=
number;
}
public
String
getFirstImageUrl()
{
return
firstImageUrl;
}
public
void
setFirstImageUrl(String
firstImageUrl)
{
this.firstImageUrl
=
firstImageUrl;
}
public
List<String>
getImageList()
{
return
imageList;
}
public
void
setImageList(List<String>
imageList)
{
this.imageList
=
imageList;
}
}步骤3:先声明好list等变量,避免一会看代码不知道某个变量怎么来的privateList<PictureBean>beanList;//最后我们会把所有的文件夹模型都放到这里,你要是问图片在哪?当然是在PictureBean的imageList里啦步骤4:看getImages()方法private
void
getImages()
{
new
Thread(new
Runnable()
{//查询图片什么的,肯定要开一个线程就不解释了
@Override
public
void
run()
{
Uri
imageUri
=
MediaStore.Images.Media.EXTERNAL_CONTENT_URI;//这个Uri代表要查询的数据库名称加上表的名称
ContentResolver
contentResolver
=
context.getContentResolver();//这个用的少不知道该怎么表达,反正就是对外共享数据呗,提供手机里的各种数据(视频,图片,文件)
Cursor
cursor
=
contentResolver.query(imageUri,
null,
MediaStore.Images.Media.MIME_TYPE//这个就是查询操作了吧(cursor,游标,听起来很熟悉,老师绝对讲过,不过原谅我数据库这一块渣到爆炸)
+
"=?
or
"
+
MediaStore.Images.Media.MIME_TYPE
+
"=?",
new
String[]{"image/jpeg"},
MediaStore.Images.Media.DATE_MODIFIED);
if
(cursor
==
null)
{
return;
}
List<String>
pathList
=
new
ArrayList<>();//同一个文件夹下的图片的集合
String
mParentPath
=
"";//所在文件夹的绝对路径
while
(cursor.moveToNext())
{
String
path
=
cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));//图片的绝对路径
File
file
=
new
File(path).getParentFile();
String
parentPath
=
file.getAbsolutePath();//文件夹的绝对路径
if
(cursor.isFirst())
{//如果是第一个图片
pathList.add(path);//直接加到图片集合里
mParentPath
=
parentPath;//文件夹的绝对路径
等于
我们获取到的这张图片的
文件夹的绝对路径
}
else
if
(mParentPath.equals(parentPath))
{//如果
新的图片的文件夹的绝对路径
跟上一张图片的文件夹的绝对路径相同,
说明两张图片在同一个文件夹下
pathList.add(path);//继续填到集合里
}
else
{//说明
新的图片跟
上一张图片不在同一个文件夹
下
List<String>
list
=
new
ArrayList<>();
list.addAll(pathList);
//用一个新的list
加载
之前一个文件夹下的所有图片(这里暂时想不到更好的办法了)
pathList.clear();
pathList.add(path);
//旧的list
清空之后呢,
开始加载
新的文件夹下的
第一张图片(仔细看一看就知道逻辑了,代码写的确实比较烂,哈哈哈)
PictureBean
bean
=
new
PictureBean();//我们之前写好的模型
bean.setNumber(list.size());
//数量就是list的数量
bean.setFirstImageUrl(list.get(0));
//第一张图片
bean.setImageList(list);//图片集合
bean.setParentPath(mParentPath);//所在文件夹的绝对路径
beanList.add(bean);//把模型放到步骤3定义好的list
mParentPath
=
parentPath;
//文件夹绝对路径
变成了
新的文件夹路径
}
}
//到此为止,喜大普奔,所有的图片都已经获取到了,接下来直接显示出来(想做复杂的呢可以参考微信,我正在参考中...)
handler.sendEmptyMessage(1);
}
}).start();
}步骤5:因为我们这次是简单版,既然图片数据都有了,就简单的展示一下好了Handler
handler
=
new
Handler()
{
@Override
public
void
handleMessage(Message
msg)
{
final
List<String>
list
=
new
ArrayList<>();
//因为是简单版,我就直接把所有的图片都存到一个list里用来显示了
for
(PictureBean
pictureBean
:
beanList)
{
for
(String
s
:
pictureBean.getImageList())
{
list.add(s);
}
}
adapter.setList(list);
adapter.notifyDataSetChanged();
adapter.setmOnClick(new
ItemAdapter.onClick()
{
@Ove
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 吉林别墅房屋拆迁施工方案
- 《中华民族的选择》课件
- 《时代的劳动者公开》课件
- 冀教版四年级语文下册教学计划
- 新学期历史教学计划参考
- 山西省太原市2023年八年级下学期《道德》期中试题与参考答案
- 镇卫计办2024上半年工作总结及下半年工作计划
- 二年级数学计算题专项练习1000题汇编
- 下一年司法行政工作计划行政工作计划
- 2024经济师新年工作计划范文
- 无人机兴趣班课程设计
- 红领巾爱祖国 星星火炬耀成长主题班会2
- GB/T 44589-2024机器人自适应能力技术要求
- 2024年山西杏花村汾酒集团限责任公司人才招聘71名高频难、易错点500题模拟试题附带答案详解
- 炉渣粉煤灰综合利用项目可行性研究报告
- 2024年南水北调东线总公司招聘3人高频难、易错点500题模拟试题附带答案详解
- 八年级语文上册-成语运用练习-试题
- 2024秋期国家开放大学《政治学原理》一平台在线形考(形考任务二)试题及答案
- 2021年辽宁沈阳中考满分作文《世间有味》5
- 2025年高考作文训练:审题立意分析+范文导写高考语文作文备考总复习
- Unit 8 Detective stories Period 6 Task 教学设计 2024-2025学年牛津译林版英语九年级上册
评论
0/150
提交评论