android图片画廊,获取Android上的照片画廊列表

以下是几个简单步骤的完整解决方案:

接下来的几个步骤将指导您如何创建一个Vector将保存在给定设备上找到的相册的文件。每个相册将保存一个预览图像,以及一个内部Vector将保存该相册的所有图像。

创建一个对象,该对象将保存从存储中提取的图像。我们将其称为PhoneAlbum。这是它的外观:

public class PhoneAlbum {

private int id;

private String name;

private String coverUri;

private Vector albumPhotos;

public int getId() {

return id;

}

public void setId( int id ) {

this.id = id;

}

public String getName() {

return name;

}

public void setName( String name ) {

this.name = name;

}

public String getCoverUri() {

return coverUri;

}

public void setCoverUri( String albumCoverUri ) {

this.coverUri = albumCoverUri;

}

public Vector< PhonePhoto > getAlbumPhotos() {

if ( albumPhotos == null ) {

albumPhotos = new Vector<>();

}

return albumPhotos;

}

public void setAlbumPhotos( Vector< PhonePhoto > albumPhotos ) {

this.albumPhotos = albumPhotos;

}

}

创建一个对象,该对象将保存名为“”的相册中的图像: PhonePhoto

public class PhonePhoto {

private int id;

private String albumName;

private String photoUri;

public int getId() {

return id;

}

public void setId( int id ) {

this.id = id;

}

public String getAlbumName() {

return albumName;

}

public void setAlbumName( String name ) {

this.albumName = name;

}

public String getPhotoUri() {

return photoUri;

}

public void setPhotoUri( String photoUri ) {

this.photoUri = photoUri;

}

}

创建一个接口以在完成后处理提取的图像。我们将其称为OnPhoneImagesObtained。这里是:

public interface OnPhoneImagesObtained {

void onComplete( Vector albums );

void onError();

}

创建一个新类: DeviceImageManager

public class DeviceImageManager {

}

创建之后DeviceImageManager,添加以下方法:

public static void getPhoneAlbums( Context context , OnPhoneImagesObtained listener ){

// Creating vectors to hold the final albums objects and albums names

Vector< PhoneAlbum > phoneAlbums = new Vector<>();

Vector< String > albumsNames = new Vector<>();

// which image properties are we querying

String[] projection = new String[] {

MediaStore.Images.Media.BUCKET_DISPLAY_NAME,

MediaStore.Images.Media.DATA,

MediaStore.Images.Media._ID

};

// content: style URI for the "primary" external storage volume

Uri images = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;

// Make the query.

Cursor cur = context.getContentResolver().query(images,

projection, // Which columns to return

null,       // Which rows to return (all rows)

null,       // Selection arguments (none)

null        // Ordering

);

if ( cur != null && cur.getCount() > 0 ) {

Log.i("DeviceImageManager"," query count=" + cur.getCount());

if (cur.moveToFirst()) {

String bucketName;

String data;

String imageId;

int bucketNameColumn = cur.getColumnIndex(

MediaStore.Images.Media.BUCKET_DISPLAY_NAME);

int imageUriColumn = cur.getColumnIndex(

MediaStore.Images.Media.DATA);

int imageIdColumn = cur.getColumnIndex(

MediaStore.Images.Media._ID );

do {

// Get the field values

bucketName = cur.getString( bucketNameColumn );

data = cur.getString( imageUriColumn );

imageId = cur.getString( imageIdColumn );

// Adding a new PhonePhoto object to phonePhotos vector

PhonePhoto phonePhoto = new PhonePhoto();

phonePhoto.setAlbumName( bucketName );

phonePhoto.setPhotoUri( data );

phonePhoto.setId( Integer.valueOf( imageId ) );

if ( albumsNames.contains( bucketName ) ) {

for ( PhoneAlbum album : phoneAlbums ) {

if ( album.getName().equals( bucketName ) ) {

album.getAlbumPhotos().add( phonePhoto );

Log.i( "DeviceImageManager", "A photo was added to album => " + bucketName );

break;

}

}

} else {

PhoneAlbum album = new PhoneAlbum();

Log.i( "DeviceImageManager", "A new album was created => " + bucketName );

album.setId( phonePhoto.getId() );

album.setName( bucketName );

album.setCoverUri( phonePhoto.getPhotoUri() );

album.getAlbumPhotos().add( phonePhoto );

Log.i( "DeviceImageManager", "A photo was added to album => " + bucketName );

phoneAlbums.add( album );

albumsNames.add( bucketName );

}

} while (cur.moveToNext());

}

cur.close();

listener.onComplete( phoneAlbums );

} else {

listener.onError();

}

}

现在剩下的就是将图像渲染到屏幕上了。就我而言,我喜欢使用Picasso。这是我的方法:

Picasso.with( getActivity() )

.load( "file:" + mPhoneAlbums.get( i ).getCoverUri() )

.centerCrop()

.fit()

.placeholder( R.drawable.temp_image )

.into( mAlbumPreview );

不要忘记在清单中添加读取外部存储的权限:

而已。你已准备好出发!祝好运!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值