Android锁屏与解屏相关代码分析
2011-04-23 21:30
316 查看
我觉得对于普通人来说,最常见的是Android解屏的界面,然后应该是Home界面。今天就来分析一下解屏界面的相关代码(以索爱的解锁界面为例)。
首先看解屏的界面,我把解屏的界面分为两个部分,最上部是status
Bar,下面是LockScreenSemc,在LockScreenSemc上有一个可供滑动解锁的界面,每个界面对应的类如图所示。
两个类所在包:
com.android.internal.policy.impl.LockScreenSemc.java
com.android.internal.widget.SlidingTabSemc.java
SlidingTabSemc.java分析:
分析我们的Touch在 SlidingTabSemc 上产生的效果,主要看onTouchEvent ()的处理。
ACTION_DOWN
时会调用disableButtonPress(),产生手指点击时的动画效果。
ACTION_MOVE
时会调用moveControl()产生图片跟随手指移动的效果。
ACTION_UP
时会判断移动的位置是否已经到了,可以触发Trigger的程度,如果到了,则调用
dispatchTriggerEvent,通知在 SlidingTabSemc上的Trigger Listener。由于
SlidingTabSemc上的 Trigger Listener是在
LockScreenSemc里实现的,所以会代用到 LockScreenSemc中。
LockScreenSemc.java分析:
代码中有一行: private SlidingTabSemc mSelector;
将SlidingTabSemc 作为它的一个属性值,
另外此类实现了SlidingTabSemc.OnTriggerListener。这个listener用来执行我们从左到右或者从右到左的滑动,在构造函数中有mSelector.setOnTriggerListener(this);这样我们在
SlidingTabSemc上的滑动会调用到 public void onTrigger(View v, int
whichHandle)方法中。
onTrigger的执行为两个分支,一个为从右滑向左,执行了mAudioManager.setRingerMode(),设置了声音的模式,并更新
右边声音的图片。另一个为从左滑向右,执行的是mCallback.goToUnlockScreen();这个mCallback是何方神圣呢?它是
KeyguardScreenCallback类型,并且在LockScreenSemc初始化的时候传进来的,跟踪后我们发
现,LockScreenSemc是类LockPatternKeyguardView的一个属性值(private
View
mLockScreen);KeyguardScreenCallback的实现在LockPatternKeyguardView中。
LockPatternKeyguardView中LockPatternKeyguardView的逻辑是,如果用户在设置->位置和安全
->设置屏幕锁定中设置了解锁画面,则调用了updateScreen(Mode.UnlockScreen)进入相应的解锁画面,否则调
用:getCallback().keyguardDone(true);
这个getCallback() 返回的是KeyguardViewMediator。
KeyguardViewMediator 中 keyguardDone()方法,最终会给Handler发送KEYGUARD_DONE
的消息,Handler会执行handleKeyguardDone()方法,在方法中会调用handleHide(),这个函数会将我们的LockScreenSemc给隐藏。
总结:总体来说,上面提到的类基本上可以这么认为,SlidingTabSemc属于LockScreenSemc,LockScreenSemc属于
LockPatternKeyguardView,
LockPatternKeyguardView
属于KeyguardViewManager,KeyguardViewManager来统管所有与锁解屏相关的操作,另外通过
KeyguardViewMediator,来实现KeyguardViewManager和PhoneWindowManager之间的交互与通信,如
图所示:
画面的更新实现
画面更新是由com.android.internal.policy.impl.KeyguardUpdateMonitor
来实现的。它注册锁屏Receive
用于接受各种Intent(例如:时间,电池,Sim状态,电话状态),来处理Lock界面上的信息的更新。
首先看解屏的界面,我把解屏的界面分为两个部分,最上部是status
Bar,下面是LockScreenSemc,在LockScreenSemc上有一个可供滑动解锁的界面,每个界面对应的类如图所示。
两个类所在包:
com.android.internal.policy.impl.LockScreenSemc.java
com.android.internal.widget.SlidingTabSemc.java
SlidingTabSemc.java分析:
分析我们的Touch在 SlidingTabSemc 上产生的效果,主要看onTouchEvent ()的处理。
ACTION_DOWN
时会调用disableButtonPress(),产生手指点击时的动画效果。
ACTION_MOVE
时会调用moveControl()产生图片跟随手指移动的效果。
ACTION_UP
时会判断移动的位置是否已经到了,可以触发Trigger的程度,如果到了,则调用
dispatchTriggerEvent,通知在 SlidingTabSemc上的Trigger Listener。由于
SlidingTabSemc上的 Trigger Listener是在
LockScreenSemc里实现的,所以会代用到 LockScreenSemc中。
LockScreenSemc.java分析:
代码中有一行: private SlidingTabSemc mSelector;
将SlidingTabSemc 作为它的一个属性值,
另外此类实现了SlidingTabSemc.OnTriggerListener。这个listener用来执行我们从左到右或者从右到左的滑动,在构造函数中有mSelector.setOnTriggerListener(this);这样我们在
SlidingTabSemc上的滑动会调用到 public void onTrigger(View v, int
whichHandle)方法中。
onTrigger的执行为两个分支,一个为从右滑向左,执行了mAudioManager.setRingerMode(),设置了声音的模式,并更新
右边声音的图片。另一个为从左滑向右,执行的是mCallback.goToUnlockScreen();这个mCallback是何方神圣呢?它是
KeyguardScreenCallback类型,并且在LockScreenSemc初始化的时候传进来的,跟踪后我们发
现,LockScreenSemc是类LockPatternKeyguardView的一个属性值(private
View
mLockScreen);KeyguardScreenCallback的实现在LockPatternKeyguardView中。
LockPatternKeyguardView中LockPatternKeyguardView的逻辑是,如果用户在设置->位置和安全
->设置屏幕锁定中设置了解锁画面,则调用了updateScreen(Mode.UnlockScreen)进入相应的解锁画面,否则调
用:getCallback().keyguardDone(true);
这个getCallback() 返回的是KeyguardViewMediator。
KeyguardViewMediator 中 keyguardDone()方法,最终会给Handler发送KEYGUARD_DONE
的消息,Handler会执行handleKeyguardDone()方法,在方法中会调用handleHide(),这个函数会将我们的LockScreenSemc给隐藏。
总结:总体来说,上面提到的类基本上可以这么认为,SlidingTabSemc属于LockScreenSemc,LockScreenSemc属于
LockPatternKeyguardView,
LockPatternKeyguardView
属于KeyguardViewManager,KeyguardViewManager来统管所有与锁解屏相关的操作,另外通过
KeyguardViewMediator,来实现KeyguardViewManager和PhoneWindowManager之间的交互与通信,如
图所示:
画面的更新实现
画面更新是由com.android.internal.policy.impl.KeyguardUpdateMonitor
来实现的。它注册锁屏Receive
用于接受各种Intent(例如:时间,电池,Sim状态,电话状态),来处理Lock界面上的信息的更新。
相关文章推荐
- Android锁屏与解屏相关代码分析
- Android锁屏与解屏相关代码分析
- Android锁屏及解锁相关代码分析
- Android键盘系统相关代码分析(1)
- android典型代码系列(二十七)------锁屏打开浏览器传数据,解屏最小化浏览器
- Android键盘系统相关代码分析(1)
- Android锁屏与解屏相关代码分析
- Android有用处理代码集锦-----图片相关
- 相关数值分析多种算法代码
- H5 调用android原生相机代码分析
- Android面试之View绘制流程以及invalidate()等相关方法分析
- 获取Android各类系统相关信息的接口实现代码
- Linux平台代码覆盖率测试工具GCOV相关文件分析
- Android关于Theme.AppCompat相关问题的深入分析
- Android平台webkit组件java层代码分析
- 想做一个整合开源安全代码扫描工具的代码安全分析平台 - Android方向调研
- Android代码分析
- FFMPeg代码分析:AVFrame结构体及其相关的函数
- Android Audio代码分析3 - 创建AudioTrack对象
- Android Audio代码分析26 - Audio Strategy