一直纠结的问题终于解决了,就是bitmap这个玩意 android
以前在android中,大量的使用图片,不只可使用Imageview来显示,能够作button,window的背景.,你只要放在xml中进行操做,直接利用R.drawable.fiel 就能够引用了,可是你能够想一想,若是是访问网络获取的图片,或者字节,你怎么接受呢,他不会返回一张image,网络的传输是经过流的,因此这个时候就用到了Bitmap. 数组
Bitmap和BitmmapFactory 网络
Bitmap表明一张位图,能够进行编辑了,操做了,修改了等,通常咱们就利用BitmapFactory来操做得出bitmap 工具
想实例出来一个bitmap有一个静态的就是BitmapFactory 他是一个工具类,提供了各类方法来建立Bitmap有下面四种方法 spa
BitmapFactory.decodeByteArray(byte[] data,int offset,int length)从指定字节数组的offset位置开始,将长度为length的字节,转化成一个Bitmap code
BitmapFactory.decodeFile(String pathName)这个就不用说了吧,从pathName指定的文件中进行解析建立Bitmap对象 xml
BitmapFactory.decodeFileDescriptor(FileDescriptor fd)用于从FileDescriptor对应的文件中解析建立Bitmap对象 对象
BitmapFactory.decodeResource(Resource res,int id)这个至关简单,用于根据指定的ID从指定的资源中解析,建立Bitmap对象 图片
BitmapFactory.decodeSream(InputSream is)用于从指定的输出流中解析 ip
通常状况下,咱们只要图片放在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();