launcher中Workspace类大致分析

简介: launcher中Workspace类大致分析

在Workspace.Java类实现,相关方法有:

1) computeScroll():重写了父类的computeScroll();主要功能是计算拖动的位移量、更新背景、设置要显示的屏幕(setCurrentScreen(mCurrentScreen);)。

2) dispatchDraw():重写了父类的dispatchDraw();主要功能是判断抽屉是否打开、绘制指定的屏幕,可以绘制当前一屏,也可以绘制当前屏幕和下一屏幕,也可以绘制所有的屏幕,这儿的绘制指显示屏幕上的child(例如:app、folder、Wiget)。和computeScroll()中的setCurrentScreen(mCurrentScreen);方法配合使用可以实现屏幕的拖动多少显示多少的功能。

3) onMeasure():重写了父类的onMeasure();主要功能是设置屏幕的显示大小。由每个child的measure()方法设置。

4) onLayout():重写了父类的onLayout();主要功能是设置屏幕的显示位置。由child的layout()方法设置。

5) onInterceptTouchEvent():重写了父类的onInterceptTouchEvent();主要功能是在onTouchEvent()方法之前处理touch事件。包括:down、up、move事件。

 用xy记录鼠标移动时的坐标值;

 mLastMotionX和mLastMotionY记录了上次鼠标按下时的XY值,在ACTION_MOVE中赋值;

 xDiff和yDiff记录xy与mLastMotionX、mLastMotionY差值的绝对值;

 touchSlop为系统定义的标准值,初值为16;

 当xDiff和yDiff大于touchSlop时就认为界面拖动了足够大的距离,屏幕就可以移动了;

 当onInterceptTouchEvent()返回true时进入onTouchEvent()。

6) onTouchEvent():重写了父类的onTouchEvent();主要功能是处理onInterceptTouchEvent()返回值为true时传递过来的touch事件。

相关文章
|
5天前
Mac系统R语言升级后无法加载包报错 package or namespace load failed in dyn.load
Mac系统R语言升级后无法加载包报错 package or namespace load failed in dyn.load
|
存储
Creating a workspace:创建一个工作空间
Creating a workspace:创建一个工作空间
225 0
Creating a workspace:创建一个工作空间
|
Android开发
eclipse多余的Workspace如何删除
eclipse多余的Workspace如何删除
170 0
关于catkin_init_workspace找不到命令的原因
关于catkin_init_workspace找不到命令的原因
357 3
关于catkin_init_workspace找不到命令的原因
|
XML Shell Android开发
Android 9.0 Launcher Workspace加载
加载Workspace入口在/packages/apps/Launcher3/src/com/android/launcher3/model/LoaderTask.java,想了解Launcher app的启动流程,可以先看看这篇文章,https://www.
890 0
|
Kubernetes Shell C#
通过kubectx/kubens快速切换管理k8s的context和namespace
通过kubectx/kubens快速切换管理k8s的context和namespace
|
图形学
Unity 报错之 The type or namespace name 'UI' does not exist in the namespace 'UnityEngine'
关于Unity2017 升级到 Unity2019 两个问题。 The type or namespace name 'UI' does not exist in the namespace 'UnityEngine'
2696 0
Unity 报错之 The type or namespace name 'UI' does not exist in the namespace 'UnityEngine'
|
分布式计算 大数据 C#