猿问

android选择图片在ImageView上显示,调用setImageBitmap,如何是好?

我想选择图片,在ImageView上显示。
先说明一下,百度上搜索一番发现setImageUri这个方法是不建议用的(因为有某种延迟?)
大家都建议使用setImageBitmap这个方法。
我的做法是
点击“选择”按钮后,弹出图片选择界面:
Intentintent=newIntent(Intent.ACTION_OPEN_DOCUMENT);
intent.setType("image/*");
startActivityForResult(intent,1);
然后在返回的结果中显示图片:
publicvoidonActivityResult(intrequestCode,intresultCode,Intentdata)
{
if(resultCode==Activity.RESULT_OK&&requestCode==1)
{
try
{
//获得图片的uri
UrioriginalUri=data.getData();
//将图片内容解析成字节数组
byte[]mContent=readStream(resolver.openInputStream(Uri.parse(originalUri.toString())));
//将字节数组转换为ImageView可调用的Bitmap对象
BitmapmyBitmap=getPicFromBytes(mContent,null);
////把得到的图片绑定在控件上显示
iv.setImageBitmap(myBitmap);
}catch(Exceptione)
{
System.out.println(e.getMessage());
}
}
}
跟踪了一下,一切运行顺利,数据也顺利拿到,但是iv.setImageBitmap(myBitmap);之后没有任何反映。。。。
请问各位老师,是否我还有啥操作漏掉了。。。
或者还有其他更好的方法,就请分享给我吧。
readStream(),和getPicFromBytes()如下:
publicstaticBitmapgetPicFromBytes(byte[]bytes,
BitmapFactory.Optionsopts){
if(bytes!=null)
if(opts!=null)
returnBitmapFactory.decodeByteArray(bytes,0,bytes.length,
opts);
else
returnBitmapFactory.decodeByteArray(bytes,0,bytes.length);
returnnull;
}
publicstaticbyte[]readStream(InputStreaminStream)throwsException{
byte[]buffer=newbyte[1024];
intlen=-1;
ByteArrayOutputStreamoutStream=newByteArrayOutputStream();
while((len=inStream.read(buffer))!=-1){
outStream.write(buffer,0,len);
}
byte[]data=outStream.toByteArray();
outStream.close();
inStream.close();
returndata;
}
幕布斯7119047
浏览 330回答 2
2回答

慕田峪9158850

有个问题,就是为什么iv.setImageBitmap(bmp);显示不了图片,而我注释了AndroidManifest.xml文件中的users-sdk中的android:targetSdkVersion就会出现了,有什么办法不用注释就显示呢?
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答