问题:
研究了一下Android锁屏的实现,效果如下,其实很简单。
需要引入一个第三方的框架。下面结合Demo讲解下关键步骤。
1.在工程的build.gradle文件中引入第三方库如下:
dependencies {
compile 'com.eftimoff:android-patternview:1.0.6@aar'
}
2.AndroidManifest.xml默认即可,不需要做任何修改。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:patternview="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.eftimoff.patternview.PatternView
android:id="@+id/patternView"
android:layout_width="400dp"
android:layout_height="400dp"
android:layout_centerInParent="true"
patternview:gridColumns="4"
patternview:gridRows="4" />
</RelativeLayout>
4.MainActivity.java实现具体业务逻辑,其中含有详细注释,代码如下:
package com.example.leidong.pattern;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;
import com.eftimoff.patternview.PatternView;
/**
* Created by leidong on 2017/4/2.
*/
public class MainActivity extends AppCompatActivity {
//锁屏密码图案
private PatternView patternView;
//锁屏密码图案对应的字符串
private String patternString;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化patternView
initPattern();
//SharedPreferences存储锁屏密码
final SharedPreferences sp = getSharedPreferences("MyPattern", 0);
//锁屏密码输入完成的监听
patternView.setOnPatternDetectedListener(new PatternView.OnPatternDetectedListener() {
@Override
public void onPatternDetected() {
//从SharedPreferences中拿取锁屏密码
String myPattern = sp.getString("MyPattern", null);
//若SharedPreferences中未存储锁屏密码,则当前锁屏图案存为模板
if (myPattern == null) {
patternString = patternView.getPatternString();
Toast.makeText(MainActivity.this, patternString, Toast.LENGTH_LONG).show();
SharedPreferences.Editor editor = sp.edit();
editor.putString("MyPattern", patternString);
editor.commit();
patternView.clearPattern();
return;
}
//若SharedPreferences中已存储锁屏密码,则拉取数据进行匹配
else{
//匹配成功,跳转到欢迎界面
if(myPattern.equals(patternView.getPatternString())) {
Intent intent = new Intent(MainActivity.this, WelcomeActivity.class);
patternView.clearPattern();
startActivity(intent);
return;
}
//匹配失败,Toast提示
else{
Toast.makeText(MainActivity.this, "锁屏密码错误!", Toast.LENGTH_LONG).show();
patternView.clearPattern();
}
}
}
});
}
/**
* 获取PatternView并进行相关配置
*/
private void initPattern() {
patternView = (PatternView) findViewById(R.id.patternView);
patternView.setTactileFeedbackEnabled(false);
patternView.setPathColor(Color.BLACK);
patternView.setDotColor(Color.BLACK);
patternView.setCircleColor(Color.WHITE);
}
}
运行结果如下:
1.匹配成功,跳转到欢迎界面
2.匹配失败,Toast提醒匹配失败