android自定义滑块解锁,android 滑动解锁
通过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 滑动解锁相关推荐
- android 自定义view滚动条,Android自定义View实现等级滑动条的实例
Android自定义View实现等级滑动条的实例 实现效果图: 思路: 首先绘制直线,然后等分直线绘制点: 绘制点的时候把X值存到集合中. 然后绘制背景图片,以及图片上的数字. 点击事件down的时候 ...
- android 自定义输入法布局,Android自定义输入法使用方法
Android自定义输入法使用方法 时间:2017-04-21 来源:Android开发学习网 对于Android用户而言,一般都会使用第三方的输入法.可是在输入密码时(尤其是支付相关的密码) ...
- android 自定义dialog样式,Android 自定义dialog类
首先定制style样式 styles.xml 加入自定义样式 @null true true true @color/transparent @color/transparent true 0.6 在 ...
- android自定义滑块解锁,使用Android自定义控件实现滑动解锁九宫格
本文概述: 滑动解锁九宫格的分析: 1.需要自定义控件: 2.需要重写事件onTouchEvent(); 3.需要给九个点设置序号和坐标,这里用Map类就行: 4.需要判断是否到滑到过九点之一,并存储 ...
- android 4.4 mtk 默认滑动解锁改为假指纹解锁
android4.4,客户要求去掉滑动解锁,更改为假指纹触摸方式············ 先看一下kk锁屏界面 想法是直接把滑动解锁图标换成指纹,然后onTouch解锁,要把滑动事件去掉. kk版本K ...
- android+解锁apple,欲将Android赶尽杀绝 苹果再获得滑动解锁专利追加
一年一换花样.在滑动解锁这个功能上,苹果在2010年得其第一个相关专利:一年后,再得一个:今年,他们把专利所覆盖的范围大大扩展,所有从任意屏幕区域持续移动解锁图像到解锁区的动作都未能幸免,这样一来,市 ...
- android自定义滚动日期,Android基于wheelView实现自定义日期选择器
本文实例为大家分享了Android实现自定义日期选择器的具体代码,供大家参考,具体内容如下 项目要求效果图: 要求 "6月20 星期五" 这一项作为一个整体可以滑动,"7 ...
- android自定义刻度线,Android自定义控件之刻度尺控件
今天我做的是一个自定义刻度尺控件,由于项目需求需要使用刻度尺那样滑动选择,由于对自定义控件的认识还不够深入,于是花了一周多时间才把这个控件给整出来,也是呕心沥血的经历啊,也让我对自定义控件有了自己的认 ...
- android 自定义输入法布局,Android InputMethodService|KeyboardView 自定义输入法和键盘 01...
如何自定义 安卓输入法 和 键盘 1.首先有几个关键类 1.InputMethodService 2.Keyboard 3.KeyboardView 1.1 InputMethodService 看下 ...
最新文章
- BZOJ 3524主席树裸题 (雾)
- VelocityTracker简单介绍
- centos解压zip命令_2、centos下安装elasticsearch-head
- 微软二合一能装python吗_微软再出神器,这次终于对Python下手了!
- 【分布式训练】单机多卡—PyTorch
- ubuntu防火墙操作
- 02241107班编程题 切片逆序大小写等
- linux安装telnet组件,LINUX下如何安装telnet
- Linux 下压缩与解压.zip和.rar
- Enterprise Library2.0(1):Data Access Application Block学习
- python 获取当前日期和时间_如何在Python中获取当前日期和时间?
- 万达酒店及度假村旗下“万达颐华”品牌第一家直营酒店正式开业
- 计算机科学的方法论有三个过程,计算机科学与技方法论3.ppt
- linux rs 485应用程序,Linux 的 RS485 通信协议.pdf
- 将汉语转换成拼音,实现拼音和中文双重登录
- 传统BIOS下的USB启动设置
- 系统自带的微软拼音输入法,在输入字母和数字的时候,间隔变大,输入中文没事的 问题。
- linux下安装asm数据库,Linux下ASM实例的安装
- 使用arduino驱动光驱步进电机
- windows远程命令执行
热门文章
- atitit. java jsoup html table的读取解析 总结
- mac下没有设置 SVN_EDITOR....错误解决方法
- VB.Net编程实现Web Service的基础
- python pytest allure_python-pytest-Allure2测试报告生成
- 基于人工智能方法的手写数字图像识别_【工程分析】基于ResNet的手写数字识别...
- dw6能编译asp吗,让Adobe Dreamweaver CC支持ASP
- android api版本 闪退_经验分享:从事 Android 开发六年,我学到的那些事
- mysql中decimal与float_MySQL中的float和decimal类型有什么区别
- java计数器策略模式_策略模式与外观模式 | 学步园
- python pandas筛选数据_Python pandas从字符串列的数据选择中筛选出nan