Android学习 - 自定义锁屏demo之滑动解锁
2015-04-25 21:57
661 查看
1、有两种方式实现滑动解锁,一种是在ACTION_MOVE事件发生时不断重绘制需要滑动的按钮,重绘的x坐标为当前ACTION_MOVE事件的x坐标。这种方式下,如果接收ACTION_MOVE事件的viewgroup中有子view跟需要滑动的按钮位置重叠,则会遮挡住按钮。一种方式是使用view的scrollto方法,把需要滑动的按钮所在view跟随ACTION_MOVE事件一起移动。
2、响应ACTION_MOVE事件并移动view时要注意,响应到的事件是采样的,不是每个经过的点都会响应,所以如果要判断如果滑动到右边界就不滑动,这样写的话:
如果滑动得快的话,可能采集到的点很少,会导致滑不到边界,比如ACTION_MOVE采集点只有起点,中点和超过右边界的点,那么按钮滑动到中点就不会继续滑动了。应该这样写:
3、onTouchEvent(MotionEvent event)中event的坐标点起始在接收event的view的边界,而不是整个屏幕的边界。
4、view的getLeft()和getRight得到的值是相对于父viewgroup边界的偏移值:
5、屏蔽back键
6、屏蔽home键(需要api5以上)
7、防止接听电话时锁屏
oncreate中调用:
8、开机自启动:
2、响应ACTION_MOVE事件并移动view时要注意,响应到的事件是采样的,不是每个经过的点都会响应,所以如果要判断如果滑动到右边界就不滑动,这样写的话:
case MotionEvent.ACTION_MOVE: if(x < 右边界x坐标){ 滑动到x }
如果滑动得快的话,可能采集到的点很少,会导致滑不到边界,比如ACTION_MOVE采集点只有起点,中点和超过右边界的点,那么按钮滑动到中点就不会继续滑动了。应该这样写:
if(x>右边界x坐标){ x = 右边界x坐标; 滑动到x; }
3、onTouchEvent(MotionEvent event)中event的坐标点起始在接收event的view的边界,而不是整个屏幕的边界。
4、view的getLeft()和getRight得到的值是相对于父viewgroup边界的偏移值:
position of this view relative to its parent
5、屏蔽back键
public boolean onKeyDown(int keyCode ,KeyEvent event){ if(event.getKeyCode() == KeyEvent.KEYCODE_BACK) return true ; else return super.onKeyDown(keyCode, event); }
6、屏蔽home键(需要api5以上)
@Override public void onAttachedToWindow() { this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG); super.onAttachedToWindow(); }
7、防止接听电话时锁屏
oncreate中调用:
TelephonyManager mTelephonyMgr = (TelephonyManager) this .getSystemService(Context.TELEPHONY_SERVICE); mTelephonyMgr.listen(new TeleListener(), PhoneStateListener.LISTEN_CALL_STATE); class TeleListener extends PhoneStateListener { @Override public void onCallStateChanged(int state, String incomingNumber) { super.onCallStateChanged(state, incomingNumber); switch (state) { // 空闲 case TelephonyManager.CALL_STATE_IDLE: { break; } // 接通 case TelephonyManager.CALL_STATE_OFFHOOK: { finish(); break; } // 振铃 case TelephonyManager.CALL_STATE_RINGING: { finish(); break; } default: break; } } }
8、开机自启动:
<receiver android:name=".OpenMbBcReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter> </receiver> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>
相关文章推荐
- 自定义锁屏demo之滑动解锁
- 自定义锁屏demo之滑动解锁
- Android自定义锁屏实现----仿正点闹钟滑屏解锁
- Android自定义锁屏实现----仿正点闹钟滑屏解锁
- Android自定义锁屏实现----仿正点闹钟滑屏解锁
- Apidemo学习 android 自定义View
- Android入门-ListView-自定义adapter和滑动解锁
- Android学习小demo(1)自定义View
- Android学习小demo(2)自定义ViewGroup
- Android学习小demo(3)自定义ViewGroup 利用 scroller 实行屏幕滚动
- Android学习自定义View(四)——继承控件(滑动时ListView的Item出现删除按钮)
- Android学习自定义View(四)——继承控件(滑动时ListView的Item出现删除按钮)
- Android学习小Demo(11)一个显示行线的自定义EditText
- Android学习小Demo(15)一个自定义AlertDialog的实现
- android 4.4 滑动锁屏界面,按menu键可以解锁
- Android学习小Demo一个显示行线的自定义EditText
- android解锁界面,插上USB弹出打开USB存储设置界面,按HOME键/返回键直接回到launcher,而非滑动锁屏界面
- Android 不锁屏(按power键不用滑动解锁,直接显示桌面)
- Android 自定义View学习(3)--仿IOS风格滑动按钮
- Android自定义绘制:Shader - 模仿iOS滑动解锁