Android学习 - 自定义锁屏demo之滑动解锁

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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值