編輯:關於Android編程
重要的屬性值: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 mNotificationIcons Notification圖標加到這個布局中,此布局也屬於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顯示出來。www.2cto.com
當我們手指離開時調用順序如下:
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。
作者:LuoXianXion
最近心情比較浮躁,項目初步已經完成一直沒有心情來更新博客,基本功能已經實現了包括添加城市,刪除城市,獲取城市部分天氣預報信息,已經詳細的天氣預報信息,還集成了ShareS
期待已久的MIUI 8終於上線啦!經過全新設計的MIUI 8靈感來源於變幻萬千的“萬花筒”,在色彩、交互動畫、系統字體等方面的大膽改
智能手機其實是展示分身魅力的最佳舞台,如何在一個屏幕裡顯示多個軟件窗口?同時運行兩個微信和QQ?總之,“一機兩用”就是我們的既定目標
JSON的定義: 一種輕量級的數據交換格式,具有良好的可讀和便於快速編寫的特性。業內主流技術為其提供了完整的解決方案(有點類似於正則表達式 ,獲得了當今大部分語言的支持)