Android开发实现从相册中选择并显示多张照片
时间: 2024-03-03 18:51:56 浏览: 83
要实现从相册中选择并显示多张照片,你可以按照以下步骤进行:
1. 在布局文件中添加一个GridView用于显示图片。
2. 创建一个适配器类,继承自BaseAdapter,并实现getView方法。在getView方法中,可以使用ImageView显示图片。
3. 在Activity或Fragment中,定义一个List<Uri>用于存储选择的图片Uri。
4. 创建一个Intent,指定action为Intent.ACTION_GET_CONTENT,type为"image/*",并设置为多选模式。启动该Intent,从相册中选择照片。
5. 在onActivityResult方法中,获取选择的照片Uri,并将其添加到List<Uri>中。
6. 在适配器中,将List<Uri>中的Uri转换为Bitmap,并设置到ImageView中。
代码示例:
1. 布局文件
```
<GridView
android:id="@+id/gridView"
android:numColumns="3"
android:columnWidth="100dp"
android:stretchMode="columnWidth"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
```
2. 适配器类
```
public class ImageAdapter extends BaseAdapter {
private Context mContext;
private List<Uri> mUris;
public ImageAdapter(Context context, List<Uri> uris) {
mContext = context;
mUris = uris;
}
@Override
public int getCount() {
return mUris.size();
}
@Override
public Object getItem(int position) {
return mUris.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
} else {
imageView = (ImageView) convertView;
}
Uri uri = mUris.get(position);
Bitmap bitmap = null;
try {
bitmap = MediaStore.Images.Media.getBitmap(mContext.getContentResolver(), uri);
} catch (IOException e) {
e.printStackTrace();
}
imageView.setImageBitmap(bitmap);
return imageView;
}
}
```
3. Activity或Fragment中的代码
```
public class MainActivity extends AppCompatActivity {
private static final int REQUEST_CODE_SELECT_IMAGE = 1;
private List<Uri> mUris = new ArrayList<>();
private GridView mGridView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mGridView = findViewById(R.id.gridView);
mGridView.setAdapter(new ImageAdapter(this, mUris));
findViewById(R.id.btnSelectImage).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
startActivityForResult(Intent.createChooser(intent, "Select Picture"), REQUEST_CODE_SELECT_IMAGE);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE_SELECT_IMAGE && resultCode == RESULT_OK) {
if (data.getData() != null) {
mUris.add(data.getData());
} else {
ClipData clipData = data.getClipData();
if (clipData != null) {
for (int i = 0; i < clipData.getItemCount(); i++) {
mUris.add(clipData.getItemAt(i).getUri());
}
}
}
((ImageAdapter) mGridView.getAdapter()).notifyDataSetChanged();
}
super.onActivityResult(requestCode, resultCode, data);
}
}
```