有趣的EditView为空时的抖动效果(用户名和密码)--第三方开源--ClearEditText
ClearEditText在github上的链接地址是:https://github.com/zhangphil/ClearEditText
用法十分简单,在布局中使用ClearEditText,在JAVA中setShakeAnimation()即可。
1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:background="#95CAE4"> 6 7 8 <com.example.clearedittext.ClearEditText 9 android:id="@+id/username" 10 android:layout_marginTop="60dp" 11 android:layout_width="fill_parent" 12 android:background="@drawable/login_edittext_bg" 13 android:drawableLeft="@drawable/icon_user" 14 android:layout_marginLeft="10dip" 15 android:layout_marginRight="10dip" 16 android:singleLine="true" 17 android:drawableRight="@drawable/delete_selector" 18 android:hint="输入用户名" 19 android:layout_height="wrap_content" > 20 21 </com.example.clearedittext.ClearEditText> 22 23 <com.example.clearedittext.ClearEditText 24 android:id="@+id/password" 25 android:layout_marginLeft="10dip" 26 android:layout_marginRight="10dip" 27 android:layout_marginTop="10dip" 28 android:drawableLeft="@drawable/account_icon" 29 android:hint="输入密码" 30 android:singleLine="true" 31 android:password="true" 32 android:drawableRight="@drawable/delete_selector" 33 android:layout_width="fill_parent" 34 android:layout_height="wrap_content" 35 android:layout_below="@id/username" 36 android:background="@drawable/login_edittext_bg" > 37 </com.example.clearedittext.ClearEditText> 38 39 <Button 40 android:id="@+id/login" 41 android:layout_width="fill_parent" 42 android:layout_height="wrap_content" 43 android:layout_marginLeft="10dip" 44 android:layout_marginRight="10dip" 45 android:background="@drawable/login_button_bg" 46 android:textSize="18sp" 47 android:textColor="@android:color/white" 48 android:layout_below="@+id/password" 49 android:layout_marginTop="25dp" 50 android:text="登录" /> 51 52 </RelativeLayout>
1 package com.example.clearedittext; 2 3 import android.content.Context; 4 import android.graphics.drawable.Drawable; 5 import android.text.Editable; 6 import android.text.TextWatcher; 7 import android.util.AttributeSet; 8 import android.view.MotionEvent; 9 import android.view.View; 10 import android.view.View.OnFocusChangeListener; 11 import android.view.animation.Animation; 12 import android.view.animation.CycleInterpolator; 13 import android.view.animation.TranslateAnimation; 14 import android.widget.EditText; 15 16 public class ClearEditText extends EditText implements 17 OnFocusChangeListener, TextWatcher { 18 /** 19 * 删除按钮的引用 20 */ 21 private Drawable mClearDrawable; 22 /** 23 * 控件是否有焦点 24 */ 25 private boolean hasFoucs; 26 27 public ClearEditText(Context context) { 28 this(context, null); 29 } 30 31 public ClearEditText(Context context, AttributeSet attrs) { 32 //这里构造方法也很重要,不加这个很多属性不能再XML里面定义 33 this(context, attrs, android.R.attr.editTextStyle); 34 } 35 36 public ClearEditText(Context context, AttributeSet attrs, int defStyle) { 37 super(context, attrs, defStyle); 38 init(); 39 } 40 41 42 private void init() { 43 //获取EditText的DrawableRight,假如没有设置我们就使用默认的图片,右边位置图片 44 mClearDrawable = getCompoundDrawables()[2]; 45 if (mClearDrawable == null) { 46 // throw new NullPointerException("You can add drawableRight attribute in XML"); 47 mClearDrawable = getResources().getDrawable(R.drawable.delete_selector); 48 } 49 50 mClearDrawable.setBounds(0, 0, mClearDrawable.getIntrinsicWidth(), mClearDrawable.getIntrinsicHeight()); 51 //默认设置隐藏图标 52 setClearIconVisible(false); 53 //设置焦点改变的监听 54 setOnFocusChangeListener(this); 55 //设置输入框里面内容发生改变的监听 56 addTextChangedListener(this); 57 } 58 59 60 /** 61 * 因为我们不能直接给EditText设置点击事件,所以我们用记住我们按下的位置来模拟点击事件 62 * 当我们按下的位置 在 EditText的宽度 - 图标到控件右边的间距 - 图标的宽度 和 63 * EditText的宽度 - 图标到控件右边的间距之间我们就算点击了图标,竖直方向就没有考虑 64 */ 65 @Override 66 public boolean onTouchEvent(MotionEvent event) { 67 if (event.getAction() == MotionEvent.ACTION_UP) { 68 if (getCompoundDrawables()[2] != null) { 69 70 boolean touchable = event.getX() > (getWidth() - getTotalPaddingRight()) 71 && (event.getX() < ((getWidth() - getPaddingRight()))); 72 73 if (touchable) { 74 this.setText(""); 75 } 76 } 77 } 78 79 return super.onTouchEvent(event); 80 } 81 82 /** 83 * 当ClearEditText焦点发生变化的时候,判断里面字符串长度设置清除图标的显示与隐藏 84 */ 85 @Override 86 public void onFocusChange(View v, boolean hasFocus) { 87 this.hasFoucs = hasFocus; 88 if (hasFocus) { 89 setClearIconVisible(getText().length() > 0); 90 } else { 91 setClearIconVisible(false); 92 } 93 } 94 95 96 /** 97 * 设置清除图标的显示与隐藏,调用setCompoundDrawables为EditText绘制上去 98 * @param visible 99 */ 100 protected void setClearIconVisible(boolean visible) { 101 Drawable right = visible ? mClearDrawable : null; 102 setCompoundDrawables(getCompoundDrawables()[0], 103 getCompoundDrawables()[1], right, getCompoundDrawables()[3]); 104 } 105 106 107 /** 108 * 当输入框里面内容发生变化的时候回调的方法 109 */ 110 @Override 111 public void onTextChanged(CharSequence s, int start, int count, 112 int after) { 113 if(hasFoucs){ 114 setClearIconVisible(s.length() > 0); 115 } 116 } 117 118 @Override 119 public void beforeTextChanged(CharSequence s, int start, int count, 120 int after) { 121 122 } 123 124 @Override 125 public void afterTextChanged(Editable s) { 126 127 } 128 129 130 /** 131 * 设置晃动动画 132 */ 133 public void setShakeAnimation(){ 134 this.setAnimation(shakeAnimation(5)); 135 } 136 137 138 /** 139 * 晃动动画 140 * @param counts 1秒钟晃动多少下 141 * @return 142 */ 143 public static Animation shakeAnimation(int counts){ 144 Animation translateAnimation = new TranslateAnimation(0, 10, 0, 0); 145 translateAnimation.setInterpolator(new CycleInterpolator(counts)); 146 translateAnimation.setDuration(1000); 147 return translateAnimation; 148 } 149 150 151 }
转载于:https://www.cnblogs.com/zzw1994/p/5027733.html
有趣的EditView为空时的抖动效果(用户名和密码)--第三方开源--ClearEditText相关推荐
- 解决WordPress博客安装插件时提示输入FTP用户名和密码的问题
http://www.lajiz.cn/1310.html 自从垃圾站博客从电信通搬家到万网虚拟主机后,总是出现问题,刚开始是万网M3主机禁用mail()函数导致WordPress博客无法发送评论回复 ...
- html用户名和密码不能为空,【JS】判断用户名和密码是否为空
在用户登录页面我们通常需要过滤用户的一些输入,如空格输入或者什么都不输等等,并在用户输入完成时给出红色字的错误提示,在这里分享一些自己写的代码. 首先在login.jsp页面中会有一个用户名和密码的提 ...
- java用户名密码不能为空代码_jsp注册页面用户名,密码,确认密码,手机号,邮箱不能为空...
效果图: 全部代码: pageEncoding="UTF-8"%> 注册界面 body{ background-image:url(images/image2.jpg); b ...
- 注册时验证用户名和密码是否合法
一. /* 在注册时通常要验证用户名和密码是否合法,运用学习过的知识完成如下操作: 1.用户名长度大于等于6位,必须包含数字和英文字母 2.密码长度大于等于8位,必须包含特殊符合_或者$,英文字母以及 ...
- java access 密码_java 连接加密Access2007数据库时,不用输入用户名密码也能连上
java 连接加密Access2007数据库时,不用输入用户名密码也能连上 我用Access2007做了一个加密的数据库,用的是Access本身的功能加密的.双击打开Database2.mdb文件时, ...
- html验证用户名和密码,如何用javascript判断用户名和密码是否为空?
用javascript判断用户名和密码是否为空的方法:JavaScript中可以使用(表单名.文本域名.value==''")来判断表单中用户名与密码是否为空. 用javascript判断用 ...
- js表单验证,如果不为空时自动改变提交按钮的背景色
<!DOCTYPE html><head><title>js验证表单,如果表单都不为空,则按钮颜色自变,某为空时恢复原本背景色</title><s ...
- 当对象或对象属性为空时,如何安全给对象或对象属性添加默认值
今天遇到的问题,也是写代码的习惯问题,逻辑没有问题,但不规范,也不安全, 容易出现漏洞. 先将代码贴出: String isPrintLogo = vodInfoDto.getIsPrintLogo( ...
- 循环测试:结果为空时的处理
当结果为空时,程序的循环是如何来处理呢? 以下为 Do ... Loop While 和 Do ... Loop Until 两种循环式下的处理. 示例1: <script language=& ...
最新文章
- 头戴式AR/VR 光学标定
- centos 6.8 编译安装git 2.11.0
- 数据预处理--噪声_为什么数据对您的业务很重要-以及如何处理数据
- INFO:安装包文件共享(Shared Files)设置注意事项
- Python中正则表达式讲解
- 栈和队列之用一个栈实现另一个栈的排序
- 关于JNI的几个问题
- 机器学习案例系列教程——优化方法总结(梯度下降法、牛顿法、拟牛顿法、共轭梯度法等)
- FFmpeg的模块介绍(一)
- java 按行读取txt文件并存入数组
- 数据结构学习---有序链表的合并
- 基于51单片机的音乐盒彩灯频谱喷泉原理图方案设计
- MPEG-2 数字视频技术参考指南 (7)—— ATSC数字电视标准
- eaxyx验证布丰投针试验,求解圆周率
- html制作网页案例代码----(故宫博物馆9页)特效很多
- 用Andriod studio学习制作APP
- java c语言 关系_java和c语言有什么共同点?
- AE学习笔记一:绘制其他形状和取消填充
- windows XP 系统文件诠释B(转)
- Java数组基础使用下标、遍历、存取与本质
热门文章
- multipart/form-data与application/octet-stream的区别、application/x-www-form-urlencoded
- hadoop商品推荐_北京尚学堂学员学习经验分享:商品推荐
- linux安装chrome_chrome 的安装及出现密钥问题(ubuntu16.04)
- tablepc是什么平板电脑_tablepc平板电脑怎么截图
- 系统学习深度学习(十八)--NIN模型
- 图像形状特征(四)--轮廓树及PGH
- 获取位置_原神蜥蜴尾巴怎么获得 蜥蜴尾巴获取位置分享
- PAT (Basic Level) Practice1010 一元多项式求导
- java 垃圾回收入门
- kafka的topic操作入门