重要的属性值:StatusBarView mStatusBarView;这个就是我们看到的StatusBar的View。

NotificationCallbacks mNotificationCallbacks; 用于NotificationManagerService的回调函数。将消息通知NotificationManagerService

HashMap<IBinder,StatusBarIcon> mIconMap = new HashMap<IBinder,StatusBarIcon>(); 保存更新或者增加图标的Client端引用

ArrayList<StatusBarIcon> mIconList = new ArrayList<StatusBarIcon>(); 现在在显示中的所有图标的引用

LinearLayout mIcons;普通的图标要加到这个布局中,此布局属于mStatusBarView

IconMerger mNotificationIconsNotification图标加到这个布局中,此布局也属于mStatusBarView

ExpandedView mExpandedView;我们在点击StatusBar时,会出现新的View可供我们拖拽扩大,

我猜这个变量就代表了那个View

boolean mExpanded; 这个变量表明拖动时动态变更的View是否已经展开。

DateView mDateView;我们点击StatusBar之后,会在StatusBar上出现年月日期,这个代表那个View。

我一直好奇点击StatusBar会出现新的View,它的流程如下:

mStatusBarView就是StatusBar所代表的View,那么查看它的代码,看它处理点击的方法。

它属性变量保存了StatusBarService的引用,它的点击处理函数onTouchEvent()和onInterceptTouchEvent()都会调用到StatusBarService 类中的interceptTouchEvent()方法。

当我们点击StatusBar时,会先走到onInterceptTouchEvent()这个函数,而且这个函数只会在第一次走到,然后会走到onTouchEvent()方法,这个方法每收到一个TouchEvent()就会走到,因此会走到多次。

函数onInterceptTouchEvent()的处理:

1、调用到StatusBarService中的interceptTouchEvent(),在这里又会走到event.getAction() == MotionEvent.ACTION_DOWN 分支,在分支中,由于mExpanded == false且y < hitSize 会继续调用prepareTracking(y)。

2、函数prepareTracking()处理:这里由于mExpanded == false 所以会向H中发送MSG_ANIMATE_REVEAL消息,进入StatusBarService自己的消息循环。执行doRevealAnimation()函数。

3、函数doRevealAnimation()处理:这个实现的功能很简单,就是在TrackingView(就是点击时StatusBar下出现的View)还没有完全显示出来的时候,通过动画的方式,一点一点的将TrackingView显示出来。

当我们手指离开时调用顺序如下:

1、StatusBarView:onTouchEvent(),此时Action != MotionEvent.ACTION_DOWN走到 StatusBarService:interceptTouchEvent();

2、interceptTouchEvent()中会走到分支 else if (mTracking);

3、由于ACTION_UP 所以会调用performFling(),在这里会向Handler发送 MSG_ANIMATE 消息,然后进入函数doAnimation()。

4、在doAnimation()由于mAnimY < mStatusBarView.getHeight()分支成立,会继续调用updateExpandedViewPos(0)和performCollapse();

5、在performCollapse()中,通过mTrackingView.setVisibility(View.GONE) 实现了 让mTrackingView的隐藏,其实这个函数还实现了其他的View的隐藏,比如我们点击后进行拖动所出现的其他View。


更多相关文章

  1. Android五大布局详解及属性
  2. Android 控件布局实现卡片效果,阴影效果
  3. Android 键盘布局总结
  4. Android 开发 之 折叠布局(CollapsingToolbarLayout)
  5. Android开发中布局属性的使用汇总
  6. FrameLayout的使用——android开发之xml布局文件
  7. Android控件布局属性全解

随机推荐

  1. Android开发入门之学习笔记(四):程序窗口的
  2. android之相机开发
  3. 手动root android 模拟器(emulator)详细
  4. Android开发必备的免费资源和工具
  5. 浅入浅出Android(000):Hello Android
  6. 去掉Android(安卓)USB授权框
  7. Android(安卓)C编程技巧
  8. Android学习笔记(一)
  9. 学习android前的环境配置,准备工作,安装and
  10. Android(安卓)菜单(OptionMenu)大全 建立