package com.demo.example.utill;
import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Rect;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.SystemClock;
import android.preference.PreferenceManager;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import com.demo.example.R;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List;
public class LockPatternView extends View {
private static final int ASPECT_LOCK_HEIGHT = 2;
private static final int ASPECT_LOCK_WIDTH = 1;
private static final int ASPECT_SQUARE = 0;
private static final int MILLIS_PER_CIRCLE_ANIMATING = 700;
private static final boolean PROFILE_DRAWING = false;
private long mAnimatingPeriodStart;
private Bitmap mBitmapBtnDefault;
private Bitmap mBitmapBtnTouched;
private Bitmap mBitmapCircleDefault;
private Bitmap mBitmapCircleGreen;
private Bitmap mBitmapCircleRed;
private int mBitmapHeight;
private int mBitmapWidth;
private final Context mContext;
private OnPatternListener mOnPatternListener;
private float mSquareHeight;
private float mSquareWidth;
private SharedPreferences f342sp;
private final int mStrokeAlpha = 160;
private final Path mCurrentPath = new Path();
private final Rect mInvalidate = new Rect();
private final Matrix mCircleMatrix = new Matrix();
private final int mPadding = 0;
private final int mPaddingLeft = 0;
private final int mPaddingRight = 0;
private final int mPaddingTop = 0;
private final int mPaddingBottom = 0;
private boolean mDrawingProfilingStarted = false;
private Paint mPaint = new Paint();
private Paint mPathPaint = new Paint();
private ArrayList<Cell> mPattern = new ArrayList<>(9);
private boolean[][] mPatternDrawLookup = (boolean[][]) Array.newInstance(boolean.class, 3, 3);
private float mInProgressX = -1.0f;
private float mInProgressY = -1.0f;
private DisplayMode mPatternDisplayMode = DisplayMode.Correct;
private boolean mInputEnabled = true;
private boolean mInStealthMode = false;
private boolean mEnableHapticFeedback = true;
private boolean mPatternInProgress = false;
private float mDiameterFactor = 0.15f;
private float mHitFactor = 0.6f;
private int mAspect = 0;
public enum DisplayMode {
Correct,
Animate,
Wrong
}
public interface OnPatternListener {
void onPatternCellAdded(List<Cell> list);
void onPatternCellAdded(List<Cell> list, MotionEvent motionEvent);
void onPatternCleared();
void onPatternDetected(List<Cell> list);
void onPatternStart();
}
public LockPatternView(Context context, AttributeSet attributeSet) {
super(context, attributeSet);
this.mContext = context;
this.f342sp = PreferenceManager.getDefaultSharedPreferences(context);
setClickable(true);
this.mPathPaint.setAntiAlias(true);
this.mPathPaint.setDither(true);
this.mPathPaint.setColor(-1);
this.mPathPaint.setStyle(Paint.Style.STROKE);
this.mPathPaint.setStrokeJoin(Paint.Join.ROUND);
this.mPathPaint.setStrokeCap(Paint.Cap.ROUND);
this.mBitmapBtnDefault = whitebitmap(false, this.f342sp.getInt("PatternType", 0));
this.mBitmapCircleGreen = whitebitmap(true, this.f342sp.getInt("PatternType", 0));
this.mBitmapBtnTouched = BitmapFactory.decodeResource(context.getResources(), R.drawable.transparent);
this.mBitmapCircleRed = BitmapFactory.decodeResource(context.getResources(), R.drawable.transparent);
this.mBitmapCircleDefault = BitmapFactory.decodeResource(context.getResources(), R.drawable.transparent);
this.mPathPaint.setAlpha(160);
Bitmap[] bitmapArr = {this.mBitmapBtnDefault, this.mBitmapBtnTouched, this.mBitmapCircleDefault, this.mBitmapCircleGreen, this.mBitmapCircleRed};
for (int i = 0; i < 5; i++) {
Bitmap bitmap = bitmapArr[i];
this.mBitmapWidth = Math.max(this.mBitmapWidth, bitmap.getWidth());
this.mBitmapHeight = Math.max(this.mBitmapHeight, bitmap.getHeight());
}
}
private Bitmap getBitmapFor(int i) {
return BitmapFactory.decodeResource(getContext().getResources(), i);
}
public boolean isInStealthMode() {
return this.mInStealthMode;
}
public void setInStealthMode(boolean z) {
this.mInStealthMode = z;
}
public boolean isTactileFeedbackEnabled() {
return this.mEnableHapticFeedback;
}
public void setTactileFeedbackEnabled(boolean z) {
this.mEnableHapticFeedback = z;
}
public void setOnPatternListener(OnPatternListener onPatternListener) {
this.mOnPatternListener = onPatternListener;
}
public void setPattern(DisplayMode displayMode, List<Cell> list) {
this.mPattern.clear();
this.mPattern.addAll(list);
for (Cell cell : list) {
this.mPatternDrawLookup[cell.getRow()][cell.getColumn()] = true;
}
setDisplayMode(displayMode);
}
public DisplayMode getDisplayMode() {
return this.mPatternDisplayMode;
}
public void setDisplayMode(DisplayMode displayMode) {
this.mPatternDisplayMode = displayMode;
if (displayMode == DisplayMode.Animate) {
if (this.mPattern.size() != 0) {
this.mAnimatingPeriodStart = SystemClock.elapsedRealtime();
Cell cell = this.mPattern.get(0);
this.mInProgressX = getCenterXForColumn(cell.getColumn());
this.mInProgressY = getCenterYForRow(cell.getRow());
clearPatternDrawLookup();
} else {
throw new IllegalStateException("you must have e pattern to animate if you want to set the display mode to animate");
}
}
invalidate();
}
public List<Cell> getPattern() {
return (List) this.mPattern.clone();
}
private void notifyCellAdded(MotionEvent motionEvent) {
OnPatternListener onPatternListener = this.mOnPatternListener;
if (onPatternListener != null) {
onPatternListener.onPatternCellAdded(this.mPattern, motionEvent);
}
sendAccessEvent(R.string.alp_lockscreen_access_pattern_cell_added);
}
private void notifyPatternStarted() {
OnPatternListener onPatternListener = this.mOnPatternListener;
if (onPatternListener != null) {
onPatternListener.onPatternStart();
}
sendAccessEvent(R.string.alp_lockscreen_access_pattern_start);
}
private void notifyPatternDetected() {
OnPatternListener onPatternListener = this.mOnPatternListener;
if (onPatternListener != null) {
onPatternListener.onPatternDetected(this.mPattern);
}
sendAccessEvent(R.string.alp_lockscreen_access_pattern_detected);
}
private void notifyPatternCleared() {
OnPatternListener onPatternListener = this.mOnPatternListener;
if (onPatternListener != null) {
onPatternListener.onPatternCleared();
}
sendAccessEvent(R.string.alp_lockscreen_access_pattern_cleared);
}
public void clearPattern() {
resetPattern();
}
private void resetPattern() {
this.mPattern.clear();
clearPatternDrawLookup();
this.mPatternDisplayMode
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
键盘锁屏是最好的视差效果锁之一,以提高安全性 键盘锁屏是一款用于保护您的手机向第三方使用的应用程序。 您只需在此应用程序的设置中启用密码锁,并创建自己的密码即可解锁手机屏幕。 键盘锁屏是可以提高手机安全性的最佳锁屏之一。 键盘锁屏使用类似iPhone锁屏风格的密码,帮助您成为第一个体验最新ios锁屏的人。 特征 滑动来解锁。 输入 PIN 码进行解锁。 许多漂亮的壁纸可供选择 选择解锁动画 键盘锁定屏幕还允许使用图库中的壁纸 解锁声音启用/禁用。 解锁振动启用/禁用。 要求 Android Studio Android SDK JDK/JRE 键盘锁屏 - 键盘锁 - 手机安全 - 图案锁屏 - 锁屏 - Admob 广告 指示 解压缩项目文件 在 Android Studio 上打开项目文件 运行项目 更改UI设计颜色、应用程序icon和启动屏幕图像以用于换皮。
资源推荐
资源详情
资源评论
收起资源包目录
多功能键盘锁屏app-Android项目源代码 (239个子文件)
gradlew.bat 2KB
.gitignore 127B
.gitignore 8B
build.gradle 1KB
build.gradle 453B
settings.gradle 16B
gradlew 5KB
gradle-wrapper.jar 52KB
LockPatternView.java 37KB
LockActivity.java 31KB
LockSettings.java 20KB
CropImageView.java 17KB
CropOverlayView.java 17KB
SetPinActivitySample.java 13KB
SweetAlertDialog.java 13KB
CircleRippleLayout.java 11KB
ImageViewTouchBase.java 11KB
Edge.java 11KB
ImageViewUtil.java 11KB
C4404vp.java 11KB
SuccessTickView.java 6KB
HandleUtil.java 6KB
InsertPatternActivity.java 6KB
Rotate3dAnimation.java 5KB
Shimmer.java 5KB
Wall.java 4KB
OptAnimationLoader.java 4KB
ShimmerViewHelper.java 4KB
ImageAdapter.java 4KB
ShimmerTextView.java 4KB
CropActivity.java 4KB
AdAdmob.java 4KB
PinthemeActivity.java 3KB
PthemeActivity.java 3KB
PatternThemeAdapter.java 3KB
PinThemeAdapter.java 3KB
MonitoredActivity.java 2KB
SplashScreen.java 2KB
HandleHelper.java 2KB
PaintUtil.java 2KB
LockPatternUtils.java 2KB
RotateBitmap.java 2KB
CircleLayout.java 2KB
ImageUtils.java 2KB
BackgroundManager.java 2KB
Utils.java 2KB
ActivityC4377pp.java 2KB
Typewriter.java 2KB
CustomScaleAnimation.java 1KB
VerticalHandleHelper.java 1KB
CenterHandleHelper.java 1KB
HorizontalHandleHelper.java 1KB
Dot.java 1KB
CustomTypefaceSpan.java 1KB
LockPatternActivity.java 1KB
RepeateReciver.java 1KB
C4378Rb.java 1KB
AspectRatioUtil.java 1KB
Handle.java 1017B
C4401a.java 946B
CustomAlphaAnimation.java 820B
CornerHandleHelper.java 705B
Bootreciver.java 621B
MyApplication.java 590B
CustomType.java 580B
ShimmerViewBase.java 475B
Lists.java 465B
VisibleForTesting.java 429B
BaseAnimationListener.java 401B
PinListener.java 342B
AbstractC4402d.java 307B
Holder.java 274B
EdgePair.java 237B
Holder.java 208B
Holder.java 185B
AbstractC4403e.java 146B
i.jpg 217KB
j.jpg 213KB
b.jpg 213KB
q.jpg 188KB
z2.jpg 187KB
t.jpg 187KB
z4.jpg 186KB
z6.jpg 185KB
z7.jpg 181KB
e.jpg 180KB
z3.jpg 169KB
r.jpg 161KB
z1.jpg 159KB
z8.jpg 146KB
g.jpg 126KB
z9.jpg 124KB
k.jpg 109KB
h.jpg 108KB
z5.jpg 108KB
d.jpg 104KB
z10.jpg 103KB
f.jpg 99KB
s.jpg 93KB
l.jpg 89KB
共 239 条
- 1
- 2
- 3
资源评论
小云同志你好
- 粉丝: 1049
- 资源: 935
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功