如何将String转为Uri,Uri转为Drawable

String转Uri

Uri uri=Uri.parse(s);
Uri转Drawable

Drawable d=Drawable.createFromStream(getContentResolver().openInputStream(uri,null));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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获取图片的真实路径。以上代码已经对这种情况进行了处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值