安卓中图片上传,小图预览,可删除
时间: 2023-10-01 18:08:21 浏览: 46
在Android中实现图片上传、小图预览和删除,可以按照以下步骤进行:
1. 添加权限:在AndroidManifest.xml文件中添加以下权限:
```xml
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
```
2. 在布局文件中添加一个ImageView和一个Button,用于显示和选择图片:
```xml
<ImageView
android:id="@+id/iv_preview"
android:layout_width="match_parent"
android:layout_height="300dp"
android:scaleType="centerCrop" />
<Button
android:id="@+id/btn_select_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="选择图片" />
```
3. 创建一个选择图片的方法,在这个方法中调用系统的文件选择器:
```java
private void selectImage() {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivityForResult(intent, REQUEST_CODE_SELECT_IMAGE);
}
```
4. 在Activity中重写onActivityResult方法,获取选择的图片并显示在ImageView中:
```java
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_SELECT_IMAGE && resultCode == RESULT_OK) {
Uri uri = data.getData();
try {
Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);
ivPreview.setImageBitmap(bitmap);
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
5. 创建一个上传图片的方法,在这个方法中将选择的图片上传到服务器:
```java
private void uploadImage(Uri uri) {
String filePath = getRealPathFromURI(uri); // 获取图片的真实路径
File file = new File(filePath);
// TODO: 将文件上传到服务器
}
```
6. 创建一个删除图片的方法,在这个方法中删除ImageView中显示的图片:
```java
private void deleteImage() {
ivPreview.setImageDrawable(null);
}
```
完整的代码如下:
```java
public class MainActivity extends AppCompatActivity {
private static final int REQUEST_CODE_SELECT_IMAGE = 1;
private ImageView ivPreview;
private Button btnSelectImage;
private Button btnUploadImage;
private Button btnDeleteImage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ivPreview = findViewById(R.id.iv_preview);
btnSelectImage = findViewById(R.id.btn_select_image);
btnUploadImage = findViewById(R.id.btn_upload_image);
btnDeleteImage = findViewById(R.id.btn_delete_image);
btnSelectImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
selectImage();
}
});
btnUploadImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (ivPreview.getDrawable() != null) {
Uri uri = Uri.parse(getRealPathFromURI(getImageUri()));
uploadImage(uri);
}
}
});
btnDeleteImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
deleteImage();
}
});
}
private void selectImage() {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivityForResult(intent, REQUEST_CODE_SELECT_IMAGE);
}
private void uploadImage(Uri uri) {
String filePath = getRealPathFromURI(uri);
File file = new File(filePath);
// TODO: 将文件上传到服务器
}
private void deleteImage() {
ivPreview.setImageDrawable(null);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_SELECT_IMAGE && resultCode == RESULT_OK) {
Uri uri = data.getData();
try {
Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);
ivPreview.setImageBitmap(bitmap);
} catch (IOException e) {
e.printStackTrace();
}
}
}
private Uri getImageUri() {
Drawable drawable = ivPreview.getDrawable();
Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
String path = MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, "Title", null);
return Uri.parse(path);
}
private String getRealPathFromURI(Uri contentUri) {
String[] proj = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(contentUri, proj, null, null, null);
int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String filePath = cursor.getString(columnIndex);
cursor.close();
return filePath;
}
}
```
注意:在Android 10及以上的版本中,需要使用MediaStore API获取图片的真实路径。以上代码中已经对这种情况进行了处理。