Android 3.0~4.0 新特性调研(补充)

又调研了一下3.0~4.1的其他一些与开发有关的新特性,有些还需要深入的调研,后续会补上

 

Android 3.0:

1.      System clipboard系统剪切板

Android 3.0中的剪切板进行了增强,本次可以支持除了纯文本外更多的内容,如,URLIntent,对于剪切板类ClipboardManager仍然通过getSystemService(CLIPBOARD_SERVICE)来实例化,新增的ClipData类用于管理具体的复制对象,可以在SDKandroid.content.ClipData.Item中找到。

参考:http://www.2cto.com/kf/201204/127934.html

2.      支持拖拽

可以通过OnDragListener结果监听组件被同拽的时间

   public static abstract interfaceOnDragListener{

      public abstract booleanonDrag(View paramView, DragEventparamDragEvent);

   }

   DragEvent定义了以下几种状态:

   ACTION_DRAG_STARTED = 1;

   ACTION_DRAG_LOCATION = 2;

   ACTION_DROP = 3;

   ACTION_DRAG_ENDED = 4;

   ACTION_DRAG_ENTERED = 5;

   ACTION_DRAG_EXITED = 6;

   详细的解释和用法:http://blog.sina.com.cn/s/blog_4031190c01015vyj.html

3.      新增组件

AdapterViewAnimator 

AdapterViewFlipper 

CalendarView 

ListPopupWindow 

StackView继承自AdapterViewAnimator 

NumberPicker  :数字选择器,是新的日期和时间选择的组成部分

PopupMenu :弹出菜单 

 

Android 4.0

网络:

1.      支持企业vpn

社交网络:

1.      User Profile(机主的个人档案)

需要的权限:

READ_PROFILE:ContactsContract.Profile提供器提供读访问;

WRITE_PROFILE:ContactsContract.Profile提供器提供写访问;

2.      Invite Intent

INVITE_CONTACT intent 允许一个应用按照用户意愿,邀请一个联系人进入某个社会网络的行为。

如果应用允许接受此动作,需要在<intent-filter>里添加INVITE_CONTACT

相机:

1.      人脸识别 ,解锁

人脸识别功能得到应用,比如解锁,可以在设置之后自拍进行屏幕解锁.这个应用在API中也做了相应的改变:

Camera类,包括用于人脸检测和控制焦距和感光区的API 。

face detection (人脸检测)

人脸识别,不仅检测人脸特征,而且还检测眼睛和嘴巴。如果你想要使用你的相机来做人脸识别的程序,你必须使用setFaceDetectionListener方法来注册 Camera.FaceDetectionListener对象。然后,您可以启动camera surface ,并调用startFaceDetection方法开始检测人脸。

如果你实现了Camera.FaceDetectionListener接口,当系统检测到一个或者更多个人脸时,便会向所调用的接口回调onFaceDetection方法,包括一组Camera.Face 对象。

Camera.Face类的实例提供有关于人脸识别的各种各样信息,其中包括:1、一个相对与相机当前视野的所指定人脸边界的矩形框( Rect 对象)。2、一个1到100之间并用于人脸识别精确度的整数。每个所检测到的人脸,会分配独一无二的ID。当识别到眼睛和嘴巴时,都会生成一个 Point 对象。该对象指定眼睛或者嘴巴的空间位置。另外并不是所有设备都可以支持人脸识别,你应该先调用getMaxNumDetectedFaces()方法来保证返回的值大于0,说明你的设备是支持该技术的。当然,还有一些设备可以支持人脸识别,但是不支持眼睛和嘴巴的鉴定,在这种情况下,Camera.Face 对象为空值。

2.      焦距和感光区域

照相机程序现在可以控制焦距和感光的白平衡以及自动曝光。 这两个功能使用新的Camera.Area类来指定照相所集中和所计算的出来的当前视图区域。Camera.Area类的实例定义该视图边界的矩形区域和面积比重。设置焦距或感光度之前,应首先调用getMaxNumFocusAreas()或getMaxNumMeteringAreas()方法。如果这些返回零,则该设备不支持相应的功能。

设置焦距调用setFocusAreas()方法;设置感光度调用setMeteringAreas()方法;这两种方法每次会返回包含所对应焦距或者感光度的Camera.Area对象列表(List)。例如,你可以实现一个功能,允许用户设置通过触摸一个预览区域,您再转化到重点领域Camera.Area对象和要求,重点放在该区域的场景,相机在现场的面积变化,在这一领域的重点或曝光将不断更新。

3.      摄像头自动对焦

4.0可以启用连续自动对焦拍照。而为了使照相程序调用连续自动对功能, 需要传递FOCUS_MODE_CONTINUOUS_PICTURE参数到setFocusMode()方法中 。当准备拍摄照片,调用autoFocus()方法。Camera.AutoFocusCallback对象便立即收到一个回调来指示是否获得到了焦点。接受到回调值后,如果还需要重新自动对焦,则必须调用cancelAutoFocus()方法。连续自动对焦功能支持视频拍摄,使用FOCUS_MODE_CONTINUOUS_VIDEO参数。

4.      其他新特性

在录制视频时,您可以调用takePicture()方法保存照片,同时不中断视频的拍摄。 但是,在这样做之前,你应该调用isVideoSnapshotSupported()方法来以确保硬件是否支持这个功能。

使用setAutoExposureLock()和setAutoWhiteBalanceLock()方法可以锁定自动曝光和白平衡来防止用户更改这些属性。

相机拍摄运行时,可以调用setDisplayOrientation()方法。 在以前的版本中,你只能在运行之前使用,但现在你可以在任何时候改变方向。相机广播意图

Camera.ACTION_NEW_PICTURE :这表明用户已经占据了新的照片。 内置的摄像头应用程序调用此广播,拍摄照片后,第三方的摄像头应用程序也应该拍摄照片后播出的这一意图。

Camera.ACTION_NEW_VIDEO :这表明用户已经占据了一个新的视频。内置摄像头的应用程序调用此广播后的视频记录和第三方的摄像头应用程序也应该拍摄视频后播放这一意图。

多媒体:

1.       Remote control client

新RemoteControlClient允许媒体播放器,使媒体播放器能够被远程控制,如设备锁定屏幕。媒体播放器还可以使遥控器上的显示目前正在播放的媒体,如进度信息和专辑封面的信息。

硬件加速:

从android 4.0开始,所有的窗口都会默认开启硬件加速。程序中得把targetSdkVersion和 minSdkVersion这两个值设置成14或者更高。通过硬件加速可以使用户体验到动画更流畅,滚动时更流畅,也会提高程序的整体的性能.

如果有必要,可以手动禁止硬件加速。在AndroidManifest文件中可以利用 hardwareAccelerated  属性来对个别个的<activity>元素或者<application>元素禁止硬件加速。用户也可以在代码中对个别的View进行禁止硬件加速,如:

setLayerType(LAYER_TYPE_SOFTWARE).

事件:

1.       悬停事件(用于有鼠标的设备)

MotionEvent类增加三个操作:

        ACTION_HOVER_ENTER

        ACTION_HOVER_EXIT

        ACTION_HOVER_MOVE

2.       手写事件

MotionEvent增加getToolType()方法获得指针设备类型,有以下几种类型:

OOL_TYPE_UNKNOWN

 TOOL_TYPE_FINGER(手指)

TOOL_TYPE_MOUSE (鼠标)

OOL_TYPE_STYLUS (手写笔)

TOOL_TYPE_ERASER(橡皮檫,具体什么东西还不清楚,还需要深入调研)

3.       鼠标按钮

通过MotionEvent.getButtonState()可以获取鼠标或按钮的状态,定义了以下几种状态:

BUTTON_PRIMARY  (鼠标左键)

BUTTON_SECONDARY  (鼠标右键)

BUTTON_TERTIARY   (鼠标中键)

BUTTON_BACK

BUTTON_FORWARD

 

 

Android 4.1

增强通知栏:

新版系统为开发者提供了三种不同的通知样式,最高可以达到256dp,用来显示更多信息。新版通知在原有的信息提示,快速进入基础上,增加更多交互操作。可以直接查看信息、图片、提醒、E-mail等内容,无需进入应用程序就可以进行一键回拨、一键分享等操作。

当有新通知时,之前旧通知会自动收回为简洁样式。用户可以通过双指手势展开和收回相应的通知条,以便于直接查看更多信息。

 

从Android 3.0到Android4.0 SDK 新增了很多特性,其中新的UI改变很大,所以我们在这里主要深入的了解一下UI方面的API。

1.     Fragment

自从Android 3.0中引入fragments 的概念,根据词海的翻译可以译为:碎片、片段。其上的是为了解决不同屏幕分辩率的动态和灵活UI设计。大屏幕如平板小屏幕如手机,平板电脑的设计使得其有更多的空间来放更多的UI组件,而多出来的空间存放UI使其会产生更多的交互,从而诞生了fragments 。fragments的设计不需要你来亲自管理view hierarchy 的复杂变化,通过将Activity 的布局分散到frament 中,可以在运行时修改activity 的外观,并且由activity管理的back stack 中保存些变化。

Fragment的详解: http://blog.csdn.net/a15874647/article/details/7680530

 

Fragment事务

在Activity中使用有关Fragment的添加、删除、替换以及用它们执行其他响应用户交互行为的能力是一项伟大的功能。你提交给Activity的每组改变集合被叫做一个事务,并且你能使用FragmentTransaction中APIs来执行它。也能够把每个事务保存到被Activity管理的回退堆栈中,并允许用户通过Fragment改变来向后导航(类似同Activity的向后导航)。

Fragment事务详解: http://blog.csdn.net/fireofstar/article/details/7272853

 

Fragment的应用场景:

1)     替代Tab

TabActivity继承自ActivityGroup,每一个Tab指向一个Activity,Tab的切换也就是Activity的切换,但是ActivityGroup的设计的功能较弱,子Actiivty的生命周期不全,而且ActivityGroup没有栈,所有子Activity都是平行的关系,不能记录导航路线,另外,对子Activity的管理能力也很弱,不能灵活的添加、移除、替换子Activity。

Fragment完全解决了上述问题,它设计的功能和Activity一样强大,包括生命周期、导航等,Fragment的每次导航都可以记录下来用于返回。

2)     实现大屏或横屏时标题和内容同时展现,小屏或竖屏时打开新的界面

在Fragment之前我们如果实现此功能很麻烦,需要3个独立的Activity,而且包含相同的逻辑,现在我们只需要2个Fragment,分别包含标题列表和内容的逻辑。

3)     设计更灵活的程序结构

Fragment的意思就是碎片,因为碎所以能更灵活的拼装

2.     ActionBar

Action Bar主要是用于代替传统的标题栏,对于Android平板设备来说屏幕更大它的标题使用ActionBar来设计可以展示更多丰富的内容,方便操控。

 

Action Bar主要功能包含:

1)     显示选项菜单

2)     提供标签页的切换方式的导航功能,可以切换多个fragment.

3)     提供下拉的导航条目.

4)     提供交互式活动视图代替选项条目

5)     使用程序的图标作为返回Home主屏或向上的导航操作。

      ActionBar使用详解:http://zwkufo.blog.163.com/blog/static/2588251201132805532568/

3.     Newwidget and layout

1)       ViewPager

ViewPager类提供了多界面切换的新效果。新效果有如下特征:

u  当前显示一组界面中的其中一个界面。

u  当用户通过左右滑动界面时,当前的屏幕显示当前界面和下一个界面的一部分。

u  滑动结束后,界面自动跳转到当前选择的界面中

             http://www.2cto.com/kf/201209/153095.html

2)       GridLayout

GridLayout 是一个新的视角地方子视图在一个矩形网格。不像TableLayout,GridLayout依靠扁平式,不用中间观点,如表行提供结构。相反,我们指定哪些行(s)和列(s)他们应该占据(单元可以跨越多行和/或列),在默认情况下,是奠定在网格顺序的行和列。GridLayout取向决定是否连续的默认了孩子水平或垂直。间隔空间的我们可能被指定或者通过,使用新的空间景观实例或设置相应的参数对我们。

3)       TextureView

TextureView是一个全新的视角,允许你来显示内容流,比如视频或一个开放式绘图介面现场。虽然SurfaceView相似,TextureView是独特的,因为它表现得像一个普通的观点,而不是创造另一个窗口,所以你可以把它像其他视图对象。例如,你可以申请转变,有生命的,它使用ViewPropertyAnimator,或调整其混浊setAlpha()。

4)       Switch(开关组件)

你可以用android:textOn 和android:textOff属性指明文字出现在交换机在断断续续的设置。

4.     PropertyAnimation

3.0以前,android支持两种动画模式,tween animation,frame animation,在android3.0中又引入了一个新的动画系统:propertyanimation,这三种动画模式在SDK中被称为propertyanimation,view animation,drawable animation。

1)       View Animation(Tween Animation)

View Animation(Tween Animation):补间动画,给出两个关键帧,通过一些算法将给定属性值在给定的时间内在两个关键帧间渐变。

View animation只能应用于View对象,而且只支持一部分属性,如支持缩放旋转而不支持背景颜色的改变。

而且对于View animation,它只是改变了View对象绘制的位置,而没有改变View对象本身,比如,你有一个Button,坐标(100,100),Width:200,Height:50,而你有一个动画使其变为Width:100,Height:100,你会发现动画过程中触发按钮点击的区域仍是(100,100)-(300,150)。

View Animation就是一系列View形状的变换,如大小的缩放,透明度的改变,位置的改变,动画的定义既可以用代码定义也可以用XML定义,当然,建议用XML定义。

可以给一个View同时设置多个动画,比如从透明至不透明的淡入效果,与从小到大的放大效果,这些动画可以同时进行,也可以在一个完成之后开始另一个。

用XML定义的动画放在/res/anim/文件夹内,XML文件的根元素可以为<alpha>,<scale>,<translate>,<rotate>,interpolator元素或<set>(表示以上几个动画的集合,set可以嵌套)。默认情况下,所有动画是同时进行的,可以通过startOffset属性设置各个动画的开始偏移(开始时间)来达到动画顺序播放的效果。

可以通过设置interpolator属性改变动画渐变的方式,如AccelerateInterpolator,开始时慢,然后逐渐加快。默认为AccelerateDecelerateInterpolator。

2)       DrawableAnimation(FrameAnimation)

DrawableAnimation(Frame Animation):帧动画,就像GIF图片,通过一系列Drawable依次显示来模拟动画的效果。

3)         PropertyAnimation

属性动画,这个是在Android 3.0中才引进的,以前学WPF时里面的动画机制好像就是这个,它更改的是对象的实际属性,在View Animation(Tween Animation)中,其改变的是View的绘制效果,真正的View的属性保持不变,比如无论你在对话中如何缩放Button的大小,Button的有效点击区域还是没有应用动画时的区域,其位置与大小都不变。而在Property Animation中,改变的是对象的实际属性,如Button的缩放,Button的位置与大小属性值都改变了。而且PropertyAnimation不止可以应用于View,还可以应用于任何对象。PropertyAnimation只是表示一个值在一段时间内的改变,当值改变时要做什么事情完全是你自己决定的。

Animation 详解:http://blog.csdn.net/a15874647/article/details/7683073

5.     Loader

装载器从android3.0开始引进。它使得在activity或fragment中异步加载数据变得简单。装载器具有如下特性:

u  它们对每个Activity和Fragment都有效。

u  他们提供了异步加载数据的能力。

u  它们监视数据源的一将一动并在内容改变时传送新的结果。

u  当由于配置改变而被重新创建后,它们自动重连到上一个加载器的游标,所以不必重新查询数据。

http://blog.csdn.net/a15874647/article/details/7683330

 

以上这些都是3.x或4.x才具备的特性,如何在低版本的SDK中使用这些特性呢?

新版SDK发布的同时也发布了一个扩展包android-support-v4,把部分特性单独的抽出来,使低版本的SDK也可以使用这些特性,主要支持以下特性:

u  Fragment

u  Loader

u  ViewPager

u  GridLayout

 

只需要引入android-support-v4.jar包就可以使用上述特性,人人最新的客户端就使用了这个扩展包。

 

ActionBar在这个扩展包里没有得到支持,但是可以使用第三方的包:http://actionbarsherlock.com/https://github.com/johannilsson/android-actionbar

 

附件是android-support-v4的官方samples

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值