1 package com.egojit.android.sops.views.EditText;
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.animation.Animation;
10 import android.view.animation.CycleInterpolator;
11 import android.view.animation.TranslateAnimation;
12 import android.widget.EditText;
13
14 import com.asuka.android.asukaandroid.R;
15
16 /**
17 * 备注:
18 * 作者:王莹
19 * 时间:2017/4/25.
20 */
21
22 public class EditTextView
extends EditText {
23 private Drawable mClearDrawable;
24 private String edit_type;
25 private boolean isSee =
false;
//密码是否可见
26 private static final int PASSWORD_MINGWEN = 0x90
;
27 private static final int PASSWORD_MIWEN = 0x81
;
28 private int mDrawablePadding = 16
;
29 String myNamespace = "http://schemas.android.com/apk/res-auto"
;
30
31 public EditTextView(Context context) {
32 this(context,
null);
33 }
34
35 public EditTextView(Context context, AttributeSet attrs) {
36 this(context, attrs, android.R.attr.editTextStyle);
37 }
38
39 public EditTextView(Context context, AttributeSet attrs,
int defStyle) {
40 super(context, attrs, defStyle);
41
42 edit_type =
attrs.getAttributeValue(myNamespace,
43 "edit_type"
);
44 init();
45 }
46
47 private void init() {
48 //获取EditText的DrawableRight,getCompoundDrawables()获取Drawable的四个位置的数组
49 mClearDrawable = getCompoundDrawables()[2
];
50 if (mClearDrawable ==
null) {
51 if (edit_type.equals("name"
)) {
52 // 默认显示的是删除按钮
53 mClearDrawable =
getResources().getDrawable(R.drawable.delete);
54 }
else if (edit_type.equals("password"
)) {
55 // 默认显示的是明文密文按钮
56 mClearDrawable =
getResources().getDrawable(R.drawable.icon_eye);
57 }
58 }
59 //设置图标的位置以及大小,getIntrinsicWidth()获取显示出来的大小而不是原图片的大小
60 mClearDrawable.setBounds(0, 0, mClearDrawable.getIntrinsicWidth() + 10, mClearDrawable.getIntrinsicHeight() + 10
);
61 //默认设置隐藏图标
62 setClearIconVisible(
false);
63 //设置输入框里面内容发生改变的监听
64 addTextChangedListener(
new TextWatcher() {
65 @Override
66 public void beforeTextChanged(CharSequence s,
int start,
int count,
int after) {
67
68 }
69
70 @Override
71 public void onTextChanged(CharSequence s,
int start,
int before,
int count) {
72 setClearIconVisible(s.length() > 0
);
73 }
74
75 @Override
76 public void afterTextChanged(Editable s) {
77
78 }
79 });
80 }
81
82 /**
83 * 设置清除图标的显示与隐藏,调用setCompoundDrawables为EditText绘制上去
84 *
85 * @param visible
86 */
87 protected void setClearIconVisible(
boolean visible) {
88 Drawable right = visible ? mClearDrawable :
null;
89 setCompoundDrawables(getCompoundDrawables()[0
],
90 getCompoundDrawables()[1], right, getCompoundDrawables()[3
]);
91 }
92
93 /**
94 * 设置晃动动画
95 */
96 public void setShakeAnimation() {
97 this.startAnimation(shakeAnimation(3
));
98 }
99
100 /**
101 * 晃动动画
102 *
103 * @param counts 1秒钟晃动多少下
104 * @return
105 */
106 public static Animation shakeAnimation(
int counts) {
107 Animation translateAnimation =
new TranslateAnimation(0, 10, 0, 0
);
108 translateAnimation.setInterpolator(
new CycleInterpolator(counts));
109 translateAnimation.setDuration(1000
);
110 return translateAnimation;
111 }
112
113 @Override
114 public boolean onTouchEvent(MotionEvent event) {
115 if (event.getAction() ==
MotionEvent.ACTION_UP) {
116 if (getCompoundDrawables()[2] !=
null) {
117 //getTotalPaddingRight()图标左边缘至控件右边缘的距离
118 //getWidth() - getTotalPaddingRight()表示从最左边到图标左边缘的位置
119 //getWidth() - getPaddingRight()表示最左边到图标右边缘的位置
120 boolean touchable = event.getX() > (getWidth() -
getTotalPaddingRight())
121 && (event.getX() < ((getWidth() -
getPaddingRight())));
122
123 if (touchable) {
124 if (edit_type !=
null) {
125 if (edit_type.equals("name"
)) {
126 this.setText(""
);
127 }
else if (edit_type.equals("password"
)) {
128 if (isSee) {
129 //设置不可见
130 this.setInputType(PASSWORD_MIWEN);
//密文
131 this.setSelection(
this.length());
//设置光标显示
132 mClearDrawable =
getResources().getDrawable(R.drawable.loginmiwen);
133 setIcon(mClearDrawable);
134 }
else {
135 //设置可见
136 this.setInputType(PASSWORD_MINGWEN);
//明文
137 this.setSelection(
this.length());
//设置光标显示
138 mClearDrawable =
getResources().getDrawable(R.drawable.loginmingwen);
139 setIcon(mClearDrawable);
140 }
141 isSee = !
isSee;
142 }
143 }
else {
144 //默认为进行删除操作
145 this.setText(""
);
146 }
147 }
148 }
149 }
150 return super.onTouchEvent(event);
151 }
152
153 private void setIcon(Drawable mDeleIcon) {
154 //设置图标的位置以及大小,getIntrinsicWidth()获取显示出来的大小而不是原图片的大小
155 mClearDrawable.setBounds(0, 0, mClearDrawable.getIntrinsicWidth() + 10, mClearDrawable.getIntrinsicHeight() + 10
);
156 setCompoundDrawables(getCompoundDrawables()[0], getCompoundDrawables()[0], mDeleIcon, getCompoundDrawables()[0
]);
157 }
158 }
转载于:https://www.cnblogs.com/wangying222/p/8117652.html