备注:之前Android入门学习的书籍使用的是杨丰盛的《Android应用开发揭秘》,这本书是基于Android 2.2API的,目前Android已经到4.4了,更新了很多的API,也增加了很多的新组件,一直没有系统的学习过。现在开始这个“完善Android学习”系列,将2.2以后的新知识做一个概览。概览来自:http://developer.android.com/about/versions/android-2.3.3.html
一、Graphics
A)BitmapRegionDecoder
这个类可以读取图片中的某一块矩形内容,当原图片非常大,而只需要展示其中一块的时候,这个类特别有用。
B) inPreferQualityOverSpeed
BitmapFactory.Options是一个类,其用法如下:
1 BitmapFactory.Options options = new BitmapFactory.Options();
2 options.inJustDecodeBounds = true;
3 Bitmap bmp = BitmapFactory.decodeFile(path, options);
BitmapFactory.Options有很多属性可以设置true和false,这样可以操作读取图片时候的具体属性。详述如下:
1)inBitmap:
2)inDensity:见inTargetDensity
3)inDither:如果设置为true,则如果图像存在抖动,就处理抖动,设置为false则不管抖动问题;
4)inInputShareable:和inPurgeable属性一起使用,如果inPurgearble被设置为false,该属性就被忽视,如果inPurgeable被设置为true,这个属性就决定Bitmap是对元数据(inputstream、array等)进行浅拷贝还是深拷贝;
5) inJustDecodeBounds:该属性被设置为true之后(可见前面的示例代码),返回的Bitmap是Null,但是options中的outWidth和outHeight属性却会被设置,这样可以在不分配内存空间给图片的条件下获取图片的属性。
6)inMutable:如果设置为true,则decoder返回的是可变的Bitmap,这可以用来对Bitmap施加一些效果;
7)inPreferQualityOverSpeed:牺牲解码的速度,获得更高的解码质量;
8)inPreferredConfig:Bitmap.Config值,配置Bitmap的色彩存储方式,有以下四个值:
1 public static final Bitmap.Config ALPHA_8 2 public static final Bitmap.Config ARGB_4444 3 public static final Bitmap.Config ARGB_8888 4 public static final Bitmap.Config RGB_565
由此可见
ALPHA_8——代表8位Alpha位图(没有存储任何的色彩信息,每一个像素只需要1byte存储);
ARGB_4444——代表16位ARGB位图,质量太差,建议使用ARGB_8888;
ARGB_8888——代表32位ARGB位图,非常灵活,并且可以提供最好质量的图片显示,只要允许,就应该使用该配置;
RGB_565——代表8位RGB位图,不存储Alpha值,只用2bytes存储RGB信息;
9)inPremultiplied:如果被设置为true(默认值),在图片被显示出来之前各个颜色通道会被事先乘以它的alpha值,如果图片是由系统直接绘制或者是由Canvas绘制,这个值不应该被设置为false,否则会发生RuntimeException;
10)inPurgeable:如果该属性设置为true,当系统需要回收内存的时候,解码出来的Bitmap所占用的内存空间将会被清除,当再次需要使用该bitmap的时候,它就会被自动重新解码,为了重新解码,bitmap必须可以通过共享输入引用(浅复制)或者深度复制数据的方式访问存储Bitmap的原始数据。这个是由inInputShareable属性控制的。如果设置为true,就进行浅复制;如果是false,则进行深度复制并且保存数据,有时候即使允许共享,实现中也会进行输入数据的深度拷贝。该属性在decldeResource和decodeFile中使用的时候失效。
11) inSampleSize:根据设置的值缩小图片,假如设置为n,则长宽都变为原始的1/n,设置的值应该是2的幂,如果不是,就减少至最近的2的幂,比如,设置为15,则实际为8;
12)inScaled:见inTargetDensity
13)inScreenDensity:正在使用的屏幕的像素密度。
14)inTargetDensity:见:http://blog.csdn.net/sevensundark/article/details/7616450,inScaled设置为true的时候,如果InDensity和inTragetDensity都不是0并且不相等,那么bitmap就会被放缩成inTargtDensity;
15)inTempStorage:分配给解码的临时存储空间,建议值为16K;
它有两个方法:
1)BitmapFactory.Options ():创建一个默认的Options实例,如果不做设置,就像传递了一个null给decoder一样;
2)requestCancelDecode ():可以跨线程调用,从另外一个线程中调用options的该方法,就是告诉使用该options的decoder终止它的解码操作,该方法不保证终止解码,但是如果终止了,解码操作就会返回null,如果inJustDecodeBounds被设置为true,outWidth和outHeight就会被设置为-1;
二、Media framework
A)MediaMetadataRetriever
顾名思义:媒体元数据检索器。也就是说可以检索一个媒体文件的相关信息,比如视频文件的标题,唱片,播放时间等,具体示例可见:MediaMetadataRetriever类取得媒体文件信息(麻麻再也不用担心我很麻烦地获取音频文件的时长了),API可见:http://developer.android.com/reference/android/media/MediaMetadataRetriever.html
B)MediaRecorder.AudioEncoder and MediaRecorder.OutputFormat
主要是增加了AMR新的录制编码标准,以及ACC录音格式。