【移动应用开发技术】Android中怎么自定义一个图片选择器_第1页
【移动应用开发技术】Android中怎么自定义一个图片选择器_第2页
【移动应用开发技术】Android中怎么自定义一个图片选择器_第3页
【移动应用开发技术】Android中怎么自定义一个图片选择器_第4页
【移动应用开发技术】Android中怎么自定义一个图片选择器_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论