您的位置:首页 > 移动开发 > Android开发

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时要注意,响应到的事件是采样的,不是每个经过的点都会响应,所以如果要判断如果滑动到右边界就不滑动,这样写的话:

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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: