一直纠结的问题终于解决了,就是bitmap这个玩意
之前在android中,大量的使用图片,不仅可以使用Imageview来显示,可以做button,window的背景.,你只要放在xml中进行操作,直接利用R.drawable.fiel 就可以引用了,但是你可以想想,如果是访问网络获取的图片,或者字节,你怎么接受呢,他不会返回一张image,网络的传输是通过流的,所以这个时候就用到了Bitmap.
Bitmap和BitmmapFactory
Bitmap代表一张位图,可以进行编辑了,操作了,修改了等,一般我们就利用BitmapFactory来操作得出bitmap
想实例出来一个bitmap有一个静态的就是BitmapFactory 他是一个工具类,提供了各种方法来创建Bitmap有下面四种方法
BitmapFactory.decodeByteArray(byte[] data,int offset,int length)从指定字节数组的offset位置开始,将长度为length的字节,转化成一个Bitmap
BitmapFactory.decodeFile(String pathName)这个就不用说了吧,从pathName指定的文件中进行解析创建Bitmap对象
BitmapFactory.decodeFileDescriptor(FileDescriptor fd)用于从FileDescriptor对应的文件中解析创建Bitmap对象
BitmapFactory.decodeResource(Resource res,int id)这个相当简单,用于根据指定的ID从指定的资源中解析,创建Bitmap对象
BitmapFactory.decodeSream(InputSream is)用于从指定的输出流中解析
一般情况下,我们只要图片放在drawable目录下就可以了,然后通过获取ID,直接就自动封装成一个Drawable对象,但是,想一下,手机的内存比较小,你懂的,如果你不断的去解析创建一个Bitmap对象,可能由于Bitmap前面创建的还没有回收,导致内存不足,会出现异常,常见的outofmemory,这就是所谓的内存溢出(以前我还不知道,感觉好深奥,呵呵).所以我们要即使的去回收他,android中提供了两个方法,
boolean isRecycled()返回该bitmap对象是否已经被回收
void recycle(); 强制一个Bitmap对象立即回收自己.
举例 比如我有一个ImageView控件 ImageView image=(ImageView)findViewById(R.id.image)
BitmapDrawable bit=(BitmapDrawable)image.getDrawable();
if(bit !=null && bit.getBitmap.isRecycled()){
bit.getBitmap.recycle();
}
在补充一下Bitamp是一个位图,而BitmapDrawable就是封装了一个Bitmap,所以要获得Bitmap,可以直接getBitmap();