EditText之ClearEditText
1.首先看下程式碼 吧
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.os.Vibrator;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnFocusChangeListener;
import android.view.animation.Animation;
import android.view.animation.CycleInterpolator;
import android.view.animation.TranslateAnimation;
import android.widget.EditText;
public class ClearEditText extends EditText implements OnFocusChangeListener,
TextWatcher {
/**
* 刪除按鈕的引用
*/
private Drawable mClearDrawable;
private static Context context;
private boolean isVisible=true;
public boolean isVisible() {
return isVisible;
}
public void setVisible(boolean isVisible) {
this.isVisible = isVisible;
}
public ClearEditText(Context context) {
this(context, null);
}
public ClearEditText(Context context, AttributeSet attrs) {
// 這裡構造方法也很重要,不加這個很多屬性不能再XML裡面定義
this(context, attrs, android.R.attr.editTextStyle);
}
public ClearEditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
this.context = context;
init();
}
private void init() {
// 獲取EditText的DrawableRight,假如沒有設定我們就使用預設的圖片</span>
mClearDrawable = getCompoundDrawables()[2];
if (mClearDrawable == null) {
mClearDrawable = getResources().getDrawable(
R.drawable.emotionstore_progresscancelbtn);
}
mClearDrawable.setBounds(0, 0, mClearDrawable.getIntrinsicWidth(),
mClearDrawable.getIntrinsicHeight());
setClearIconVisible(false);
setOnFocusChangeListener(this);
addTextChangedListener(this);
}
/**
* 因為我們不能直接給EditText設定點選事件,所以我們用記住我們按下的位置來模擬點選事件 當我們按下的位置 在 EditText的寬度 -
* 圖示到控制元件右邊的間距 - 圖示的寬度 和 EditText的寬度 - 圖示到控制元件右邊的間距之間我們就算點選了圖示,豎直方向沒有考慮
*/
@Override
public boolean onTouchEvent(MotionEvent event) {
if (getCompoundDrawables()[2] != null) {
if (event.getAction() == MotionEvent.ACTION_UP) {
boolean touchable = event.getX() > (getWidth()
- getPaddingRight() - mClearDrawable
.getIntrinsicWidth())
&& (event.getX() < ((getWidth() - getPaddingRight())));
if (touchable) {
this.setText("");
}
}
}
return super.onTouchEvent(event);
}
/**
* 當ClearEditText焦點發生變化的時候,判斷裡面字串長度設定清除圖示的顯示與隱藏
*/
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(isVisible){
if (hasFocus) {
setClearIconVisible(getText().length() > 0);
} else {
setClearIconVisible(false);
}
}
}
/**
* 設定清除圖示的顯示與隱藏,呼叫setCompoundDrawables為EditText繪製上去
*
* @param visible
*/
protected void setClearIconVisible(boolean visible) {
Drawable right = visible ? mClearDrawable : null;
setCompoundDrawables(getCompoundDrawables()[0],
getCompoundDrawables()[1], right, getCompoundDrawables()[3]);
}
/**
* 當輸入框裡面內容發生變化的時候回撥的方法
*/
@Override
public void onTextChanged(CharSequence s, int start, int count, int after) {
if(isVisible){
setClearIconVisible(s.length() > 0);
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
/**
* 設定晃動動畫
*/
public void startShakeAnimation() {
try {
this.startAnimation(shakeAnimation(2));
} catch (Exception e) {
}
}
/**
* 晃動動畫
*
* @param counts
* 1秒鐘晃動多少下
* @return
*/
public static Animation shakeAnimation(int counts) {
Animation translateAnimation=null;
try {
Vibrator vibrator = (Vibrator) context
.getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(200L);
translateAnimation = new TranslateAnimation(0, 10, 0, 0);
translateAnimation.setInterpolator(new CycleInterpolator(counts));
translateAnimation.setDuration(1000);
} catch (Exception e) {
}
return translateAnimation;
}
}
其中的註釋還是很清晰的
用法和EditText是同樣的
最後的動畫的使用
clearEditText.startAnimation(ClearEditText..shakeAnimation(2));
相關文章
- TextView、TextView的子類之EditText、EditText的子類之自動完成文字框(AutoCompleteTextView)的功能與用法TextView
- EditText 大眾知識
- 自定義view之寫一個帶刪除按鈕的EdittextView
- EditText追加空格、限制字元等字元
- 讓你的 EditText 所有清除
- Edittext和TextView的聯動TextView
- android:EditText控制元件Android控制元件
- android EditText 回車事件Android事件
- Android:EditText 多行顯示Android
- android的EditText,焦點會預設在第一個EditText中,我不希望焦點預設在任何EditText中,如何做?Android
- 關於EditText焦點監聽
- EditText點選外部退出編輯
- EditText輸入金額型別型別
- EditText只改變Hint字型大小
- Android EditText 屬性彙總Android
- android:edittext 輸入問題Android
- listview+edittext完美解決方案View
- android edittext InputFilter 輸入控制AndroidFilter
- Android開發EditText屬性Android
- Android UI系列-----EditText和AutoCompleteTextViewAndroidUITextView
- Android EditText 修改提示字型的大小Android
- EditText中輸入資訊的限制的方法
- android更改EditText下劃線顏色Android
- EditText選擇模式的一些問題模式
- RecyclerView 多條目型別含有多個EditTextView型別
- EditText設定密碼隱藏和顯示密碼
- Android取消EditText自帶黃色邊框Android
- EditText的點選事件遮蔽鍵盤響應事件
- Android實現自帶橫線的EditTextAndroid
- 本日②三事 listView中editText焦點丟失View
- Android UI 設計(4):EditText 控制元件AndroidUI控制元件
- android — EditText 設定 imeOptions 屬性為何失效?Android
- Android多個EditText輸入效果解決方案Android
- android -- EditText 設定 imeOptions 屬性為何失效?Android
- Android入門教程 | EditText 使用者輸入Android
- 影片直播app原始碼,EditText保留小數位數APP原始碼
- Android EditText 的使用及值得注意的地方Android
- Android基礎 Android EditText禁止輸入空格Android