1、有两种方式实现滑动解锁,一种是在ACTION_MOVE事件发生时不断重绘制需要滑动的按钮,重绘的x坐标为当前ACTION_MOVE事件的x坐标。这种方式下,如果接收ACTION_MOVE事件的viewgroup中有子view跟需要滑动的按钮位置重叠,则会遮挡住按钮。一种方式是使用view的scrollto方法,把需要滑动的按钮所在view跟随ACTION_MOVE事件一起移动。
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>