安卓程序锁
现在主流的安卓APP都带有自己的程序锁,在学习完安卓之后自己开发了属于自己的安卓程序锁,代码简单而又有注释
资源下载:
安卓程序锁 资源下载地址
看如下图:
1.进入正常界面:
2.绘制界面
3.密码错误界面
4.密码绘制成功后进入主界面
锁屏主要代码摘要:
import java.util.ArrayList;
import java.util.List;
import com.infohold.lockpoint.R;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
/**
* Email 1107438082@.com
* @author 志鸿思荣
*
*/
@SuppressLint({ "ClickableViewAccessibility", "DrawAllocation" })
public class LockPatternView extends View {
//监听器
private OnPatterChangeListner onPatterChangeListner;
private static int POINT_SIZE = 5;
// 画笔
private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
// 定义九个点
public Point[][] points = new Point[3][3];
// 矩阵
private Matrix matrix = new Matrix();
private boolean isInit, isSelect, isFinish, movingNoPoint;
private float width, height, offsetX, offsetY, bitmapR, movingX, movingY;
private Bitmap pointsNomal, pointsPressed, pointsError, linePressed,
lineError;
private List<Point> pointList = new ArrayList<Point>();
public LockPatternView(Context context) {
super(context);
}
public LockPatternView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
// TODO Auto-generated constructor stub
}
public LockPatternView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
/**
* 初始化九个点
*/
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
if (!isInit) {
initPoints();
}
if (pointList.size() > 0) {
// 绘制九宫格里面的点
Point a = pointList.get(0);
for (int i = 0; i < pointList.size(); i++) {
Point b = pointList.get(i);
line2Canvas(canvas, a, b);
a = b;
}
// 绘制鼠标坐标点
if (movingNoPoint) {
line2Canvas(canvas, a, new Point(movingX, movingY));
}
}
point2Canvas(canvas);
}
/**
* 绘制划线
*
* @param canvas
* 画布
* @param a
* 第一个点
* @param b
* 第二个点
*/
private void line2Canvas(Canvas canvas, Point a, Point b) {
// 线的长度
float lineLength = (float) Point.distance(a, b);
float degrees = getDegree(a, b);
canvas.rotate(degrees, a.x, a.y);
if (a.state == Point.STATE_PRESSED) {
matrix.setScale(lineLength / linePressed.getWidth(), 1);
// 矩阵处理线的平移动,从第一个点进行平移
matrix.postTranslate(a.x - linePressed.getWidth() / 2, a.y- linePressed.getHeight() / 2);
canvas.drawBitmap(linePressed, matrix, paint);
} else {
matrix.setScale(lineLength / lineError.getWidth(), 1);
// 矩阵处理线的平移动,从第一个点进行平移
matrix.postTranslate(a.x - lineError.getWidth() / 2, a.y- lineError.getHeight() / 2);
canvas.drawBitmap(lineError, matrix, paint);
}
canvas.rotate(-degrees, a.x, a.y);
}
/**
* 将点绘制到画布上
*
* @param canvas
*/
private void point2Canvas(Canvas canvas) {
for (int i = 0; i < points.length; i++) {
for (int j = 0; j < points[i].length; j++) {
Point point = points[i][j];
if (point.state == Point.STATE_PRESSED) {
canvas.drawBitmap(pointsPressed, point.x - bitmapR, point.y
- bitmapR, paint);
} else if (point.state == Point.STATE_ERROR) {
canvas.drawBitmap(pointsError, point.x - bitmapR, point.y
- bitmapR, paint);
} else {
canvas.drawBitmap(pointsNomal, point.x - bitmapR, point.y
- bitmapR, paint);
}
}
}
}
密码碎片
package com.weiqiang.lockpoint;
import android.app.Fragment;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.infohold.lockpoint.R;
import com.weiqiang.lockpoint.LockPatternView.OnPatterChangeListner;
/**
* 密码碎片
*
* @author 志鸿思荣
*
*/
public class PasswordFragment extends Fragment implements OnPatterChangeListner, OnClickListener {
public static final String TYPE_SETTING = "setting";
public static final String TYPE_CHECK = "check";
private TextView mainLock;
private LockPatternView lockPatternView;
private LinearLayout btnLinearLayout;
private static final String ARG_TYPE = "type";
private String passString;
public PasswordFragment() {
}
public static android.app.Fragment newInstance(String arg_type) {
PasswordFragment fragment = new PasswordFragment();
Bundle args = new Bundle();
args.putString(ARG_TYPE, arg_type);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
@Nullable
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_password, container, false);
mainLock = (TextView) v.findViewById(R.id.fragment_password_lock_hint);
lockPatternView = (LockPatternView) v
.findViewById(R.id.fragment_password_lock);
btnLinearLayout = (LinearLayout) v
.findViewById(R.id.fragment_password_btn_layout);
// 设置密码
if (getArguments() != null) {
if (TYPE_SETTING.equals(getArguments().getString(ARG_TYPE))) {
btnLinearLayout.setVisibility(View.VISIBLE);
}
}
v.findViewById(R.id.fragment_password_btn_commit).setOnClickListener(this);
v.findViewById(R.id.fragment_password_btn_forget).setOnClickListener(this);
lockPatternView.setPatterChangeListner(this);
return v;
}
@Override
public void onPatterChange(String passString) {
this.passString = passString;
if (!TextUtils.isEmpty(passString)) {
mainLock.setText(passString);
//没有密码直接进入主页面
// 检查密码
if (getArguments() != null) {
if (TYPE_CHECK.equals(getArguments().getString(ARG_TYPE))) {
SharedPreferences sp = getActivity().getSharedPreferences("sp", Context.MODE_PRIVATE);
// 检查成功
if (passString.equals(sp.getString("password", ""))) {
getActivity().startActivity(new Intent(getActivity(), MainActivity.class));
getActivity().finish();
// 检查失败
} else {
mainLock.setText("密码错误");
lockPatternView.errorPoint();
}
}
}
} else {
mainLock.setText("请设置至少5位密码");
}
}
@Override
public void onPatterStart(boolean isStart) {
if (isStart) {
mainLock.setText("请绘制图案");
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.fragment_password_btn_commit:
SharedPreferences sp = getActivity().getSharedPreferences("sp",
Context.MODE_PRIVATE);
// 设置密码
sp.edit().putString("password", passString).commit();
getActivity().finish();
break;
case R.id.fragment_password_btn_forget:
sp = getActivity().getSharedPreferences("sp",Context.MODE_PRIVATE);
// 设置密码
sp.edit().putString("password", "").commit();
startActivity(new Intent(getActivity(), SettingPasswordActivity.class));
getActivity().finish();
break;
}
}
}
更多请下载资源安卓程序锁屏或者联系作者1107438082@qq.com