动画
View动画
作用对象是VIew,分为四种:平移动画(Translateanimation)、缩放动画(ScaleAnimation)、旋转动画(RotateAnimation)和透明动画(AlphaAnimation)。
View动画的特殊使用场景
LayoutAnimation
作用于ViewGroup。
Activity的切换效果
重写public void overridePendingTransition(int enterAnim, int exitAnim)方法,必须在StartActivity(Intent)或者finish()之后被调用才能生效。
enterAnim——Activity被打开时,所需的动画资源id
exitAnim——Activity被暂停时,所需的动画资源id
帧动画
顺序播放一组预定好的图片,使用AnimationDrawable类似于电影播放。由于使用比较简单容易OOM,所有使用时应尽量避免使用过多尺寸较大的图片。
属性动画
是API 11新加入的特性
Window和WindowManager
Window的内部机制
每一个Window对应一个View和ViewRootImpl,Window和View通过ViewRootImpl建立联系。
Window的创建过程
Activity的Window创建过程
由ActivityThread中的performLaunchActivity()完成整个过程,内部通过类加载器 创建Activity的实例对象,并调用attach方法进行关联。
Activity的setContentView的实现是交给Window处理,而Window的实现是PhoneWindow,其中PhoneWindow中的setContentView方法遵循以下步骤:
1、如果没有DecoeView,那么就创建它
2、将View添加到DecorView的mContentParent中
3、回调Activity的onContentChanged方法通知Activity视图已经发生改变
但此时DecorView虽然已经被创建却并没有被WindowManager识别,无法接收外界输入信息,因此在ActivityThread的handleResumeActivity方法中调用Activity的onResume方法然后调用makeVisible,DecorView才真正完成添加和显示。
Dialog的Window创建过程
通过PolicyManager的makeNewWindow方法来完成,初始化DecorView并将Dialog的视图添加到DecorView中,将DecorView添加到Window中并显示。
Toast的Window创建过程
Toast也是基于Window来实现,但由于它存在定时取消的功能,所有系统采用了Handler。内部有两种IPC过程,Toast访问NotificationManagerService;NotificationManagerService(下文简称NMS)访问Toast的TN接口;