Launcher4.0分析

Launcher 4.0的分析
1) launcher.xml
qsb_bar.xml-----search框
hotseat.xml---最底端的导航条
workspace_divider.xml--dock区域上面的那根直线
scroll_indicator.xml---页面滚动时候的指示页面的蓝色图片
Hotseat里包含一个CellLayout
apps_customize_pane---所有应用程序-------由tabs_container ,tabs两部分组成
workspace_cling 和 folder_cling------提示的向导界面
2) Workspace重写了ViewGroup的onMeasure方法(在PagedView中),在workspace中是对5个子CellLayout进行测量,测量完成对子控件进行布局了,这时候Framework层会调用PagedView中重写的 onLayout方法
3) 桌面左右滑动理解:
在PagedView中实现,当手指点下的时候,会触发PageView的onInterceptTouchEvent事件,若返回true,则会对onInterfaceTouchEvent事件进行拦截,从而触发onTouch事件,若返回false,则分两种情况,一种是点到他的子控件,那就会把Touch事件转发给他的子空间,若点击的时是空白的话,就不会触发onTouch事件了
第一次触摸到屏幕的时候,会对onInterfaceTouchEvent事件进行判断,若是down事件的话,会记录下坐标,并且改变Workspace的状态为滚动状态,这时会返回true,交给onTouch事件进行处理,这时onTouch事件也会进行判断,若是down的话,就可以显示滚动的指示条了,当我们按着屏幕不滑动的话,又会对onInterceptTouchEvent进行拦截,但类型改为move事件,因此会取消桌面的所有长按事件,从而转给onTouch事件,在onTouch事件的move中,判读我们移动了多少距离,用scrollBy进行对桌面的移动与刷新,放手会触发onTouch的up事件,判断我们是向左滑还是向右滑动。如果手指只滑动了屏幕宽度的少一半距离,则会弹回原来的页面,滑动多于屏幕宽度的一半则会进行翻页。同时要注意无论在什么情况下触发了WorkSpace滑动的事件,则系统会不断调用computeScroll()方法,我们重写这个方法同时在这个方法中调用刷新界面等操作。
4) onTouch事件中的ACTION_MASK,是多点触摸操作
5) 排序:Collections.sort(mAllApps, new ResolveInfo.DisplayNameComparator(mPackageManager));
6) AppsCustomizePagedViewl点击显示所有应用程序.,最外层包的是PageView,里面是PagedViewCellLayout
7) Workspace上的图标拖动:
只要开始拖动某个View的时候,屏幕中所有View的DragEvent.ACTION_DRAG_STARTED都会被触发,拖动的View进入被放置的View时,会触发被放置View的DragEvent.ACTION_DRAG_ENTERED,DragEvent.ACTION_DRAG_LOCATION等事件,拖动的View到被放置的View时松手,会触发被放置的View的DragEvent的ACTION_DROP,DragEvent的ACTION_DRAG_ENDED等事件
8) DragShadowBuilder提供拖拽的阴影
9) BitmapFactory.decodeResource(resource,int)------将资源文件转换为bitmap

相关文档
最新文档