android选择图片在ImageView上显示,调用setImageBitmap,如何是好?
我想选择图片,在ImageView上显示。
先说明一下,百度上搜索一番发现setImageUri这个方法是不建议用的(因为有某种延迟?)
大家都建议使用setImageBitmap这个方法。
我的做法是
点击“选择”按钮后,弹出图片选择界面:
Intent intent=new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.setType("image/*");
startActivityForResult(intent,1);
然后在返回的结果中显示图片:
public void onActivityResult(int requestCode,int resultCode,Intent data)
{
if(resultCode==Activity.RESULT_OK && requestCode==1)
{
try
{
// 获得图片的uri
Uri originalUri=data.getData();
// 将图片内容解析成字节数组
byte[] mContent=readStream(resolver.openInputStream(Uri.parse(originalUri.toString())));
// 将字节数组转换为ImageView可调用的Bitmap对象
Bitmap myBitmap=getPicFromBytes(mContent,null);
// //把得到的图片绑定在控件上显示
iv.setImageBitmap(myBitmap);
}catch(Exception e)
{
System.out.println(e.getMessage());
}
}
}
跟踪了一下,一切运行顺利,数据也顺利拿到,但是iv.setImageBitmap(myBitmap);之后没有任何反映。。。。
请问各位老师,是否我还有啥操作漏掉了。。。
或者还有其他更好的方法,就请分享给我吧。
readStream(),和getPicFromBytes() 如下:
public static Bitmap getPicFromBytes(byte[] bytes,
BitmapFactory.Options opts) {
if (bytes != null)
if (opts != null)
return BitmapFactory.decodeByteArray(bytes, 0, bytes.length,
opts);
else
return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
return null;
}
public static byte[] readStream(InputStream inStream) throws Exception {
byte[] buffer = new byte[1024];
int len = -1;
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
while ((len = inStream.read(buffer)) != -1) {
outStream.write(buffer, 0, len);
}
byte[] data = outStream.toByteArray();
outStream.close();
inStream.close();
return data;
}
android-ui Android java android-studio
青龙刀削面
9 years, 11 months ago
Answers
我是这样拿图库的图片的:
1、打开
Intent intent = new Intent(Intent. ACTION_PICK,
android.provider.MediaStore.Images.Media. EXTERNAL_CONTENT_URI);
intent.setType( "image/*");
startActivityForResult(intent, RESULT_LOAD_IMAGE);
2、回调的方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) {
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null , null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();
iv.setImageBitmap(BitmapFactory.decodeFile(picturePath));
tv.setText(picturePath);
}
骨傲天的传说
answered 9 years, 11 months ago