通过android自定义View实现横向的滑动解锁,1、滑动到中间会自动返回到原始的位置,2、滑动到底部会自动解锁,会触发解锁的回调;首先看效果图如下:

实现以上部分一共分为三部分:

其中背景通过shape.xml实现

滑动的锁是一张图片

文字通过Paint绘制在中间,高度可定制

主要介绍一下实现的主要部分:

(1)有自定义的属性如下:

(2)重写ondraw()方法,绘制文字和锁:

@Overrideprotected void onDraw(Canvas canvas)

{

canvas.getClipBounds(mTipsTextRect);

int cHeight = mTipsTextRect.height();

int cWidth = mTipsTextRect.width();

mPaint.setTextAlign(Paint.Align.LEFT);

mPaint.getTextBounds(mTipText, 0, mTipText.length(), mTipsTextRect);

float x = cWidth / 2f - mTipsTextRect.width() / 2f - mTipsTextRect.left;

float y = cHeight / 2f + mTipsTextRect.height() / 2f - mTipsTextRect.bottom;

canvas.drawText(mTipText, x, y, mPaint);

int rightMax = getWidth() - mLockRadius * 2;

if (mLocationX < 0) {

canvas.drawBitmap(mLockBitmap, 0, 0, mPaint);

} else if (mLocationX > rightMax) {

canvas.drawBitmap(mLockBitmap, rightMax, 0, mPaint);

} else {

canvas.drawBitmap(mLockBitmap, mLocationX, 0, mPaint);

}

}

(3)最重要的一步是触摸事件的处理,1、当触摸屏幕是触发ACTION_DOWN事件,计算时候触摸到锁,只有当触到锁的时候才能滑动;2、手指移动时,获得新的位置后计算新的位置,然后重新绘制,若移动到另一端表示解锁成功,执行回调方法解锁成功;3、手指离开屏幕后重新reset View,动画回到初始位置:

@Override

public boolean onTouchEvent(MotionEvent event) {

switch (event.getAction()) {

case MotionEvent.ACTION_DOWN: {

float xPos = event.getX();

float yPos = event.getY();

if (isTouchLock(xPos, yPos)) {

mLocationX = xPos - mLockRadius;

mIsDragable = true;

invalidate();

} else {

mIsDragable = false;

}

return true;

}

case MotionEvent.ACTION_MOVE: {

if (!mIsDragable) return true;

int rightMax = getWidth() - mLockRadius * 2;

resetLocationX(event.getX(),rightMax);

invalidate();

if (mLocationX >= rightMax){

mIsDragable = false;

mLocationX = 0;

invalidate();

if (mLockListener != null){

mLockListener.onOpenLockSuccess();

}

Log.e("AnimaterListener","解锁成功");

}

return true;

}

case MotionEvent.ACTION_UP: {

if (!mIsDragable) return true;

resetLock();

break;

}

}

return super.onTouchEvent(event);

}

(4)重新回到初始位置resetLock代码如下:

private void resetLock(){

ValueAnimator anim = ValueAnimator.ofFloat(mLocationX,0);

anim.setDuration(300);

anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {

@Override

public void onAnimationUpdate(ValueAnimator valueAnimator) {

mLocationX = (Float) valueAnimator.getAnimatedValue();

invalidate();

}

});

anim.start();

}

这就是完成滑动解锁的主要步骤,最后github地址在SlideView

android自定义滑块解锁,android 滑动解锁相关推荐

  1. android 自定义view滚动条,Android自定义View实现等级滑动条的实例

    Android自定义View实现等级滑动条的实例 实现效果图: 思路: 首先绘制直线,然后等分直线绘制点: 绘制点的时候把X值存到集合中. 然后绘制背景图片,以及图片上的数字. 点击事件down的时候 ...

  2. android 自定义输入法布局,Android自定义输入法使用方法

    Android自定义输入法使用方法 时间:2017-04-21     来源:Android开发学习网 对于Android用户而言,一般都会使用第三方的输入法.可是在输入密码时(尤其是支付相关的密码) ...

  3. android 自定义dialog样式,Android 自定义dialog类

    首先定制style样式 styles.xml 加入自定义样式 @null true true true @color/transparent @color/transparent true 0.6 在 ...

  4. android自定义滑块解锁,使用Android自定义控件实现滑动解锁九宫格

    本文概述: 滑动解锁九宫格的分析: 1.需要自定义控件: 2.需要重写事件onTouchEvent(); 3.需要给九个点设置序号和坐标,这里用Map类就行: 4.需要判断是否到滑到过九点之一,并存储 ...

  5. android 4.4 mtk 默认滑动解锁改为假指纹解锁

    android4.4,客户要求去掉滑动解锁,更改为假指纹触摸方式············ 先看一下kk锁屏界面 想法是直接把滑动解锁图标换成指纹,然后onTouch解锁,要把滑动事件去掉. kk版本K ...

  6. android+解锁apple,欲将Android赶尽杀绝 苹果再获得滑动解锁专利追加

    一年一换花样.在滑动解锁这个功能上,苹果在2010年得其第一个相关专利:一年后,再得一个:今年,他们把专利所覆盖的范围大大扩展,所有从任意屏幕区域持续移动解锁图像到解锁区的动作都未能幸免,这样一来,市 ...

  7. android自定义滚动日期,Android基于wheelView实现自定义日期选择器

    本文实例为大家分享了Android实现自定义日期选择器的具体代码,供大家参考,具体内容如下 项目要求效果图: 要求 "6月20 星期五" 这一项作为一个整体可以滑动,"7 ...

  8. android自定义刻度线,Android自定义控件之刻度尺控件

    今天我做的是一个自定义刻度尺控件,由于项目需求需要使用刻度尺那样滑动选择,由于对自定义控件的认识还不够深入,于是花了一周多时间才把这个控件给整出来,也是呕心沥血的经历啊,也让我对自定义控件有了自己的认 ...

  9. android 自定义输入法布局,Android InputMethodService|KeyboardView 自定义输入法和键盘 01...

    如何自定义 安卓输入法 和 键盘 1.首先有几个关键类 1.InputMethodService 2.Keyboard 3.KeyboardView 1.1 InputMethodService 看下 ...

最新文章

  1. BZOJ 3524主席树裸题 (雾)
  2. VelocityTracker简单介绍
  3. centos解压zip命令_2、centos下安装elasticsearch-head
  4. 微软二合一能装python吗_微软再出神器,这次终于对Python下手了!
  5. 【分布式训练】单机多卡—PyTorch
  6. ubuntu防火墙操作
  7. 02241107班编程题 切片逆序大小写等
  8. linux安装telnet组件,LINUX下如何安装telnet
  9. Linux 下压缩与解压.zip和.rar
  10. Enterprise Library2.0(1):Data Access Application Block学习
  11. python 获取当前日期和时间_如何在Python中获取当前日期和时间?
  12. 万达酒店及度假村旗下“万达颐华”品牌第一家直营酒店正式开业
  13. 计算机科学的方法论有三个过程,计算机科学与技方法论3.ppt
  14. linux rs 485应用程序,Linux 的 RS485 通信协议.pdf
  15. 将汉语转换成拼音,实现拼音和中文双重登录
  16. 传统BIOS下的USB启动设置
  17. 系统自带的微软拼音输入法,在输入字母和数字的时候,间隔变大,输入中文没事的 问题。
  18. linux下安装asm数据库,Linux下ASM实例的安装
  19. 使用arduino驱动光驱步进电机
  20. windows远程命令执行

热门文章

  1. atitit. java jsoup html table的读取解析 总结
  2. mac下没有设置 SVN_EDITOR....错误解决方法
  3. VB.Net编程实现Web Service的基础
  4. python pytest allure_python-pytest-Allure2测试报告生成
  5. 基于人工智能方法的手写数字图像识别_【工程分析】基于ResNet的手写数字识别...
  6. dw6能编译asp吗,让Adobe Dreamweaver CC支持ASP
  7. android api版本 闪退_经验分享:从事 Android 开发六年,我学到的那些事
  8. mysql中decimal与float_MySQL中的float和decimal类型有什么区别
  9. java计数器策略模式_策略模式与外观模式 | 学步园
  10. python pandas筛选数据_Python pandas从字符串列的数据选择中筛选出nan