• 【Android】完善Android学习(一:API 2.3.3)


    备注:之前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录音格式。

  • 相关阅读:
    苹果新的编程语言 Swift 语言进阶(五)--控制流
    苹果新的编程语言 Swift 语言进阶(四)--字符串和收集类型
    苹果新的编程语言 Swift 语言进阶(三)--基本运算和扩展运算
    苹果新的编程语言 Swift 语言进阶(二)--基本类型
    第一篇 android架构是如何满足设计目标的?
    第三篇 android 应用开发模式之MVC模式及Observer模式
    第二篇 android应用开发模式之模板模式
    为什么带网格(mesh)的模型添加了刚体Rigidbody和MeshCollider,还是会从地板穿过去?
    Mecanim动画模型规范
    HTC Vive 体验的折腾经历
  • 原文地址:https://www.cnblogs.com/lqminn/p/3465073.html
Copyright © 2020-2023  润新知