android 手势密码

下载路径:http://download.csdn.net/detail/menglele1314/8800209

package com.activity;

import android.app.Activity;

import android.os.Bundle;

import android.text.Html;

import android.text.TextUtils;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.animation.Animation;

import android.view.animation.AnimationUtils;

import android.widget.FrameLayout;

import android.widget.TextView;

import android.widget.Toast;

import com.view.GestureContentView;

import com.view.GestureDrawline.GestureCallBack;

import com.view.LockIndicator;

/**

*

* 手势密码设置界面

*

*/

public class GestureEditActivity extends Activity implements OnClickListener {

private TextView mTextCancel;

private LockIndicator mLockIndicator;

private TextView mTextTip;

private FrameLayout mGestureContainer;

private GestureContentView mGestureContentView;

private TextView mTextReset;

private boolean mIsFirstInput = true;

private String mFirstPassword = null;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_gesture_edit);

setUpViews();

setUpListeners();

}

private void setUpViews() {

mTextCancel = (TextView) findViewById(R.id.text_cancel);

mTextReset = (TextView) findViewById(R.id.text_reset);

mTextReset.setClickable(false);

mLockIndicator = (LockIndicator) findViewById(R.id.lock_indicator);

mTextTip = (TextView) findViewById(R.id.text_tip);

mGestureContainer = (FrameLayout) findViewById(R.id.gesture_container);

// 初始化一个显示各个点的viewGroup

/**

* 1 2 3

* 4 5 6

* 7 8 9

*/

mGestureContentView = new GestureContentView(this, false, "",// ""这里指的是密码字符串

new GestureCallBack() {

@Override

public void onGestureCodeInput(String inputCode) {

if (!isInputPassValidate(inputCode)) {

mTextTip.setText(Html

.fromHtml("<font color=‘#c70c1e‘>最少链接4个点, 请重新输入</font>"));

mGestureContentView.clearDrawlineState(0L);

return;

}

if (mIsFirstInput) {

mFirstPassword = inputCode;

updateCodeList(inputCode);

mGestureContentView.clearDrawlineState(0L);

mTextReset.setClickable(true);

mTextReset.setText("重新设置手势密码");

} else {

if (inputCode.equals(mFirstPassword)) {

MainActivity.str = mFirstPassword;// 绘制好的密码

Toast.makeText(GestureEditActivity.this,

"设置成功", Toast.LENGTH_SHORT).show();

mGestureContentView.clearDrawlineState(0L);

GestureEditActivity.this.finish();

MainActivity.off = true;

} else {

mTextTip.setText(Html

.fromHtml("<font color=‘#c70c1e‘>与上一次绘制不一致,请重新绘制</font>"));

// 左右移动动画

Animation shakeAnimation = AnimationUtils

.loadAnimation(

GestureEditActivity.this,

R.anim.shake);

mTextTip.startAnimation(shakeAnimation);

// 保持绘制的线,1.5秒后清除

mGestureContentView.clearDrawlineState(100L);

}

}

mIsFirstInput = false;

}

@Override

public void checkedSuccess() {

}

@Override

public void checkedFail() {

}

});

// 设置手势解锁显示到哪个布局里面

mGestureContentView.setParentView(mGestureContainer);

updateCodeList("");

}

private void setUpListeners() {

mTextCancel.setOnClickListener(this);

mTextReset.setOnClickListener(this);

}

private void updateCodeList(String inputCode) {

// 更新选择的图案

mLockIndicator.setPath(inputCode);

}

@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.text_cancel:

this.finish();

break;

case R.id.text_reset:

mIsFirstInput = true;

updateCodeList("");

mTextTip.setText("设置手势密码,防止他人未经授权查看");

break;

default:

break;

}

}

private boolean isInputPassValidate(String inputPassword) {

if (TextUtils.isEmpty(inputPassword) || inputPassword.length() < 4) {

return false;

}

return true;

}

}

package com.activity;

import android.app.Activity;

import android.os.Bundle;

import android.text.Html;

import android.text.TextUtils;

import android.view.View;

import android.view.animation.Animation;

import android.view.animation.AnimationUtils;

import android.widget.FrameLayout;

import android.widget.TextView;

import com.view.GestureContentView;

import com.view.GestureDrawline.GestureCallBack;

/**

*

* 手势绘制/校验界面

*

*/

public class GestureVerifyActivity extends Activity implements

android.view.View.OnClickListener {

private TextView mTextCancel;

private TextView mTextTip;

private FrameLayout mGestureContainer;

private GestureContentView mGestureContentView;

private TextView mTextForget;

private TextView mTextOther;

private TextView phone;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_gesture_verify);

setUpViews();

}

private void setUpViews() {

mTextCancel = (TextView) findViewById(R.id.text_cancel);

mTextCancel.setOnClickListener(this);

mTextTip = (TextView) findViewById(R.id.text_tip);

mGestureContainer = (FrameLayout) findViewById(R.id.gesture_container);

mTextForget = (TextView) findViewById(R.id.text_forget_gesture);

mTextForget.setOnClickListener(this);

mTextOther = (TextView) findViewById(R.id.text_other_account);

mTextOther.setOnClickListener(this);

phone = (TextView) findViewById(R.id.text_phone_number);

phone.setText(getProtectedMobile("15854265825"));

// 初始化一个显示各个点的viewGroup

mGestureContentView = new GestureContentView(this, true,

MainActivity.str, new GestureCallBack() {

@Override

public void onGestureCodeInput(String inputCode) {

}

@Override

public void checkedSuccess() {

mGestureContentView.clearDrawlineState(0L);

MainActivity.off = false;

GestureVerifyActivity.this.finish();

}

@Override

public void checkedFail() {

mGestureContentView.clearDrawlineState(100L);// 绘制完清除线

mTextTip.setVisibility(View.VISIBLE);

mTextTip.setText(Html

.fromHtml("<font color=‘#c70c1e‘>密码错误</font>"));

// 左右移动动画

Animation shakeAnimation = AnimationUtils

.loadAnimation(GestureVerifyActivity.this,

R.anim.shake);

mTextTip.startAnimation(shakeAnimation);

}

});

// 设置手势解锁显示到哪个布局里面

mGestureContentView.setParentView(mGestureContainer);

}

private String getProtectedMobile(String phoneNumber) {

if (TextUtils.isEmpty(phoneNumber) || phoneNumber.length() < 11) {

return "";

}

StringBuilder builder = new StringBuilder();

builder.append(phoneNumber.subSequence(0, 3));

builder.append("****");

builder.append(phoneNumber.subSequence(7, 11));

return builder.toString();

}

@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.text_cancel:

this.finish();

break;

default:

break;

}

}

}

布局

activity_gesture_edit

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="#9b0b02" >

<RelativeLayout

android:id="@+id/top_layout"

android:layout_width="match_parent"

android:layout_height="46dip"

android:background="#000000"

android:paddingLeft="20dip"

android:paddingRight="20dip"

android:layout_alignParentTop="true" >

<TextView

android:id="@+id/text_title"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerInParent="true"

android:gravity="center"

android:text="设置手势密码"

android:textSize="20sp"

android:textColor="#ffffff" />

<TextView

android:id="@+id/text_cancel"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentRight="true"

android:layout_centerVertical="true"

android:gravity="right"

android:text="取消"

android:textSize="18sp" />

</RelativeLayout>

<LinearLayout

android:id="@+id/gesture_tip_layout"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_below="@id/top_layout"

android:gravity="center"

android:orientation="vertical" >

<com.view.LockIndicator

android:id="@+id/lock_indicator"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginTop="10dip" />

<TextView

android:id="@+id/text_tip"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:gravity="center_horizontal"

android:text="绘制解锁图案"

android:textColor="#F98F12"

android:layout_marginTop="10dip" />

</LinearLayout>

<FrameLayout

android:id="@+id/gesture_container"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:padding="30dp"

android:layout_below="@id/gesture_tip_layout"

android:layout_gravity="center_horizontal"

android:layout_marginTop="20dip" >

</FrameLayout>

<TextView

android:id="@+id/text_reset"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:gravity="center_horizontal"

android:layout_below="@id/gesture_container"

android:layout_marginTop="20dip"

android:text="设置手势密码,防止他人未经授权查看"

android:textColor="#816E6A" />

</RelativeLayout>

activity_gesture_verify

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="#9b0b02" >

<RelativeLayout

android:id="@+id/top_layout"

android:layout_width="match_parent"

android:layout_height="46dip"

android:background="#000000"

android:paddingLeft="20dip"

android:paddingRight="20dip"

android:layout_alignParentTop="true"

android:visibility="visible" >

<TextView

android:id="@+id/text_title"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerInParent="true"

android:gravity="center"

android:text="设置手势密码"

android:textSize="20sp"

android:textColor="#000000" />

<TextView

android:id="@+id/text_cancel"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentRight="true"

android:layout_centerVertical="true"

android:gravity="right"

android:text="取消"

android:textSize="18sp"/>

</RelativeLayout>

<LinearLayout

android:id="@+id/gesture_tip_layout"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_below="@id/top_layout"

android:orientation="vertical"

android:paddingTop="20dip" >

<ImageView

android:id="@+id/user_logo"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center_horizontal"

android:src="@drawable/user_logo" />

<TextView

android:id="@+id/text_phone_number"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_marginTop="10dip"

android:gravity="center_horizontal"

android:text="152****8888"

android:textColor="#8C806F" />

<TextView

android:id="@+id/text_tip"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_marginTop="10dip"

android:gravity="center_horizontal"

android:textColor="#000000"

android:visibility="invisible" />

</LinearLayout>

<FrameLayout

android:id="@+id/gesture_container"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:padding="30dp"

android:layout_gravity="center_horizontal"

android:layout_below="@id/gesture_tip_layout" >

</FrameLayout>

<LinearLayout

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_alignParentBottom="true"

android:layout_marginBottom="50dip"

android:orientation="horizontal" >

<TextView

android:id="@+id/text_forget_gesture"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_weight="1.0"

android:gravity="center"

android:textSize="16sp"

android:text="忘记手势密码?"

android:textColor="#E7E7E6" />

<TextView

android:id="@+id/text_other_account"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_weight="1.0"

android:gravity="center"

android:textSize="16sp"

android:text="用其他账号登录"

android:textColor="#E7E7E6" />

</LinearLayout>

</RelativeLayout>

anim

shake.xml

<?xml version="1.0" encoding="utf-8"?>

<translate xmlns:android="http://schemas.android.com/apk/res/android"

android:fromXDelta="0"

android:toXDelta="10"

android:duration="120"

android:interpolator="@android:anim/cycle_interpolator"

android:repeatMode="restart"

android:repeatCount="2"/>

完整的Demo下载后导入就可以用了

下载路径:http://download.csdn.net/detail/menglele1314/8800209

时间: 2024-10-14 04:20:28

android 手势密码的相关文章

Android手势密码LockPatternView、LockPasswordUtils、LockPatternUtils等分析

Android手势密码LockPatternView.LockPasswordUtils.LockPatternUtils 在使用别人写的这个手势密码的时候,我们通常是有自己的需求,可能这里的代码很多也很复杂,有没有什么很多注释,要把整个代码弄明白是要花很多时间而且基础要非常好的,可能在赶项目的时候没有时间去研究,下面我列出一些关键的地方,方便修改代码. 1.在创建手势密码的时候CreateGesturePasswordActivity中 下面是手势密码设置的时候界面的一些变化,和要处理的一些事

Android手势密码实现

图 二.实现思路: 1. 正上方的提示区域,用一个类(LockIndicator.java)来实现,自定义view来绘制9个提示图标: 2. 手势密码绘制区域,用一个类(GestureContentView.java)来实现,它继承自ViewGroup里面, 添加9个ImageView来表示图标, 在onLayout()方法中设置它们的位置: 3. 手势路径绘制, 用一个类(GestureDrawline.java)来实现,复写onTouchEvent()方法,在这个方法里面监听TouchEve

Xamarin.Forms 手势密码实现

Xamarin.Forms 手势密码实现 在前面的文章中,讲到了Xamarin.Android.Xamarin.iOS.UWP分别实现手势密码功能,现在我们在Xamarin.Forms中来实现这个功能.    原理和Xamarin.Android.Xamarin.iOS.UWP一样,关键就是如何使用ViewRenderer. 首先我们新建Xamarin.Forms项目: 在项目中创建GuestureLockView继承View(官方文档: 自定义Renderer). 接下来分别在Android.

Android招财进宝手势密码的实现

这几个月都是在做招财进宝项目,一个高收益低风险的理财APP,有兴趣的可以下载玩玩,收益不错哦!!! 招财进宝下载地址:http://8.shengpay.com/ 前段时间因产品需求,做了一个手势密码,跟支付宝的手势密码类似,这里跟大家分享交流一下我实现的方式吧. 这篇来分享一下绘制手势密码的实现(主要是设置手势密码.校验手势密码): 一.大致界面介绍:                      图1                                                

Android例子源码仿支付宝手势密码的功能实现

本项目是一个仿支付宝手势密码部分的源码,项目在1280×720分辨率上显示有问题,在 854x480上没有问题,项目编码UTF-8默认编译版本4.4.2,实现思路: 1.要用一个类来表示这9个点中的第一个点.里面保留有当前点的上下左右的各个位置等属性: 2.自定义GroupView,用来装9个点,9个点的显示是通过ImageView.复写onLayout这个方法,让点按需求排列: 3.定义一个可以画线的View,复写onTouchEvent方法,在这个方法里面进行画直线的操作: 4.判断用户手指

Android例子源码仿支付宝手势密码的功能实

本项目是一个仿支付宝手势密码部分的源码,项目在1280×720分辨率上显示有问题,在 854x480上没有问题,项目编码UTF-8默认编译版本4.4.2,实现思路: 1.要用一个类来表示这9个点中的第一个点.里面保留有当前点的上下左右的各个位置等属性: 2.自定义GroupView,用来装9个点,9个点的显示是通过ImageView.复写onLayout这个方法,让点按需求排列: 3.定义一个可以画线的View,复写onTouchEvent方法,在这个方法里面进行画直线的操作: 4.判断用户手指

Andriod手势密码破解

★ 引子 之前在Freebuf上看到一片文章讲Andriod的手势密码加密原理,觉得比较有意思,所以就写了一个小程序试试. ★ 原理            Android的手势密码加密原理很简单: 先给屏幕上的每一个点编号(一般是 3 X 3): 00,01,02 03,04,05 06,07,08 注意这里的数字都是十六进制. 假设我沿着左边和下边画了一个 L 字,则手势的点排列顺序 sequence 是 00,03,06,07,08. 然后计算密文 C = SHA-1(sequence),然

支付宝钱包手势密码破解实战

背景 随着移动互联网的普及以及手机屏幕越做越大等特点,在移动设备上购物.消费已是人们不可或缺的一个生活习惯了.随着这股浪潮的兴起,安全.便捷的移动支付需求也越来越大.因此,各大互联网公司纷纷推出了其移动支付平台.其中,用的比较多的要数腾讯的微信和阿里的支付宝钱包了.就我而言,平时和同事一起出去AA吃饭,下班回家打车等日常生活都已经离不开这两个支付平台了. 正所谓树大招风,移动支付平台的兴起,也给众多一直徘徊在网络阴暗地带的黑客们又一次重生的机会.因为移动平台刚刚兴起,人们对移动平台的安全认识度还

手势密码

Activity基类 public class BaseActivity extends Activity {     @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         MyActivityManager.getInstance().push(this);     }     @Override     pro