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月前
|
存储 编译器 Go
深入理解Go Workspace的三个关键目录结构
【8月更文挑战第31天】
226 0
|
8月前
|
Android开发
Eclipse提示“The default workspace “xxxx” is in use or cannot be created Please choose a different on
Eclipse提示“The default workspace “xxxx” is in use or cannot be created Please choose a different on
关于catkin_init_workspace找不到命令的原因
关于catkin_init_workspace找不到命令的原因
554 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.
965 0
|
网络协议 Java API
Java-NIO.2中Path、 Paths、Files类的使用
Java NIO (New IO,Non-Blocking IO)是从Java 1.4版本开始引入的一套新的IO API,可以替代标准的Java IO API。NIO与原来的IO有同样的作用和目的,但是使用的方式完全不同,NIO支持面向缓冲区的(IO是面向流的)、基于通道的IO操作。NIO将以更加高效的方式进行文件的读写操作。
162 0
|
数据库
EF-CodeFirst数据库迁移时可能出现的几种错误- The EntityFramework package is not installed on project 'MovieEF'
EF-CodeFirst数据库迁移时可能出现的几种错误- The EntityFramework package is not installed on project 'MovieEF'
EF-CodeFirst数据库迁移时可能出现的几种错误- The EntityFramework package is not installed on project 'MovieEF'
|
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'
3249 0
Unity 报错之 The type or namespace name 'UI' does not exist in the namespace 'UnityEngine'
|
分布式计算 大数据 C#