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

Android手势识别Demo

2016-04-09 20:02 369 查看






//**MainActivity.java**
package com.study.geslockdemo;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;

public class MainActivity extends Activity {

private TextView tv_ges;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

tv_ges = (TextView) findViewById(R.id.tv_ges);
tv_ges.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, GesActivity.class);
startActivity(intent);
}
});
}

}


//**GesActivity.java**,其中重要的是数据的回显
package com.study.geslockdemo;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.CheckBox;
import android.widget.TextView;
import android.widget.Toast;

import com.study.geslockdemo.util.SharedPreferenceUtil;

public class GesActivity extends Activity {
protected static final int VERIFY = 1;
protected static final int EDIT = 0;
private CheckBox ckLock;
private boolean isLock;

private boolean setGesPwdSuccess;
private boolean verifySuccess;

private TextView tv_verityPwd;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ges);
ckLock = (CheckBox) findViewById(R.id.lock);
tv_verityPwd = (TextView) findViewById(R.id.tv_verityPwd);
tv_verityPwd.setClickable(true);
tv_verityPwd.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {

if (TextUtils.isEmpty(SharedPreferenceUtil.getStringData(
getApplicationContext(), "userGesPwd", ""))) {
Toast.makeText(getApplicationContext(), "您还没有设置密码",
Toast.LENGTH_SHORT).show();
return;
}

Intent intent = new Intent(GesActivity.this,
GestureVerifyActivity.class);
startActivity(intent);
}
});

// 数据回显
isLock = SharedPreferenceUtil.getBooleanData(this, "isLock", false);
setGesPwdSuccess = SharedPreferenceUtil.getBooleanData(this,
"setGesPwdSuccess", false);
verifySuccess = SharedPreferenceUtil.getBooleanData(
getApplicationContext(), "verifySuccess", false);

if (isLock) {
ckLock.setChecked(true);
} else {
ckLock.setChecked(false);
}

ckLock.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
if (setGesPwdSuccess) {
Intent intent = new Intent(GesActivity.this,
GestureVerifyActivity.class);
startActivityForResult(intent, VERIFY);
} else {
Intent intent = new Intent(GesActivity.this,
GestureEditActivity.class);
startActivityForResult(intent, EDIT);
}
}
});
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);

setGesPwdSuccess = SharedPreferenceUtil.getBooleanData(this,
"setGesPwdSuccess", false);
verifySuccess = SharedPreferenceUtil.getBooleanData(
getApplicationContext(), "verifySuccess", false);
if (requestCode == EDIT) {
if (setGesPwdSuccess) {
isLock = !isLock;
}
} else {
if (verifySuccess) {
isLock = !isLock;
}
}

ckLock.setChecked(isLock);
SharedPreferenceUtil.saveBooleanData(getApplicationContext(), "isLock",
isLock);
}
}


package com.study.geslockdemo;

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.study.geslockdemo.util.SharedPreferenceUtil;
import com.study.geslockdemo.view.GestureContentView;
import com.study.geslockdemo.view.GestureDrawline.GestureCallBack;
import com.study.geslockdemo.view.LockIndicator;

/**
* 手势密码设置界面
*/
public class GestureEditActivity extends Activity implements OnClickListener {
/** 手机号码 */
public static final String PARAM_PHONE_NUMBER = "PARAM_PHONE_NUMBER";
/** 意图 */
public static final String PARAM_INTENT_CODE = "PARAM_INTENT_CODE";
/** 首次提示绘制手势密码,可以选择跳过 */
public static final String PARAM_IS_FIRST_ADVICE = "PARAM_IS_FIRST_ADVICE";
private TextView mTextTitle;
private TextView mTextCancel;
private LockIndicator mLockIndicator;
private TextView mTextTip;
private FrameLayout mGestureContainer;
private GestureContentView mGestureContentView;
private TextView mTextReset;
private String mParamSetUpcode = null;
private String mParamPhoneNumber;
private boolean mIsFirstInput = true;
private String mFirstPassword = null;
private String mConfirmPassword = null;
private int mParamIntentCode;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gesture_edit);
setUpViews();
setUpListeners();
}

private void setUpViews() {
mTextTitle = (TextView) findViewById(R.id.text_title);
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
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(getString(R.string.reset_gesture_code));
} else {
if (inputCode.equals(mFirstPassword)) {
Toast.makeText(GestureEditActivity.this,
"设置成功", Toast.LENGTH_SHORT).show();

// add tcl
SharedPreferenceUtil.saveBooleanData(
GestureEditActivity.this,
"setGesPwdSuccess", true);
SharedPreferenceUtil.saveStringData(
getApplicationContext(), "userGesPwd",
inputCode);

mGestureContentView.clearDrawlineState(0L);
GestureEditActivity.this.finish();
} 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(1300L);
}
}
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 onBackPressed() {
SharedPreferenceUtil.saveBooleanData(getBaseContext(),
"setGesPwdSuccess", false);
super.onBackPressed();
}

@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(getString(R.string.set_gesture_pattern));
break;
default:
break;
}
}

private boolean isInputPassValidate(String inputPassword) {
if (TextUtils.isEmpty(inputPassword) || inputPassword.length() < 4) {
return false;
}
return true;
}

}


package com.study.geslockdemo;

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.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.study.geslockdemo.util.SharedPreferenceUtil;
import com.study.geslockdemo.view.GestureContentView;
import com.study.geslockdemo.view.GestureDrawline.GestureCallBack;

/**
*
* 手势绘制/校验界面
*/
public class GestureVerifyActivity extends Activity implements
android.view.View.OnClickListener {
/** 手机号码 */
public static final String PARAM_PHONE_NUMBER = "PARAM_PHONE_NUMBER";
/** 意图 */
public static final String PARAM_INTENT_CODE = "PARAM_INTENT_CODE";
private RelativeLayout mTopLayout;
private TextView mTextTitle;
private TextView mTextCancel;
private ImageView mImgUserLogo;
private TextView mTextPhoneNumber;
private TextView mTextTip;
private FrameLayout mGestureContainer;
private GestureContentView mGestureContentView;
private TextView mTextForget;
private TextView mTextOther;
private String mParamPhoneNumber;
private long mExitTime = 0;
private int mParamIntentCode;
// add tcl
private String userGesPwd;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gesture_verify);
ObtainExtraData();
setUpViews();
setUpListeners();
}

private void ObtainExtraData() {
mParamPhoneNumber = getIntent().getStringExtra(PARAM_PHONE_NUMBER);
mParamIntentCode = getIntent().getIntExtra(PARAM_INTENT_CODE, 0);

// add tcl
userGesPwd = SharedPreferenceUtil.getStringData(
getApplicationContext(), "userGesPwd", "");
}

private void setUpViews() {
mTopLayout = (RelativeLayout) findViewById(R.id.top_layout);
mTextTitle = (TextView) findViewById(R.id.text_title);
mTextCancel = (TextView) findViewById(R.id.text_cancel);
mImgUserLogo = (ImageView) findViewById(R.id.user_logo);
mTextPhoneNumber = (TextView) findViewById(R.id.text_phone_number);
mTextTip = (TextView) findViewById(R.id.text_tip);
mGestureContainer = (FrameLayout) findViewById(R.id.gesture_container);
mTextForget = (TextView) findViewById(R.id.text_forget_gesture);
mTextOther = (TextView) findViewById(R.id.text_other_account);

// 初始化一个显示各个点的viewGroup
mGestureContentView = new GestureContentView(this, true, userGesPwd,
new GestureCallBack() {

@Override
public void onGestureCodeInput(String inputCode) {

}

@Override
public void checkedSuccess() {
mGestureContentView.clearDrawlineState(0L);
Toast.makeText(GestureVerifyActivity.this, "密码正确", 1000)
.show();

/**
* 2016..tcl
*/
SharedPreferenceUtil.saveBooleanData(
GestureVerifyActivity.this, "verifySuccess",
true);

// end

GestureVerifyActivity.this.finish();
}

@Override
public void checkedFail() {
mGestureContentView.clearDrawlineState(1300L);
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 void setUpListeners() {
mTextCancel.setOnClickListener(this);
mTextForget.setOnClickListener(this);
mTextOther.setOnClickListener(this);
}

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;
}
}

@Override
public void onBackPressed() {
SharedPreferenceUtil.saveBooleanData(getApplicationContext(),
"verifySuccess", false);
super.onBackPressed();
}

}


这里列出了部分代码,需要源码的联系QQ:912674671或邮箱:tianchenglin@vip.qq.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: