1. 自定義view
package com.example.xingchouwang.view.customView;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.CycleInterpolator;
import android.view.animation.TranslateAnimation;
import android.widget.EditText;
import com.example.xingchouwang.R;
public class ClearWriteEditText extends EditText implements View.OnFocusChangeListener , TextWatcher {
/**
* 刪除按鈕的引用
*/
private Drawable mClearDrawable;
public ClearWriteEditText(Context context) {
this(context, null);
}
public ClearWriteEditText(Context context, AttributeSet attrs) {
//這里構造方法也很重要,不加這個很多屬性不能再XML里面定義
this(context, attrs, android.R.attr.editTextStyle);
}
public ClearWriteEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
mClearDrawable = getResources().getDrawable(R.mipmap.search_clear_pressed_write);
mClearDrawable.setBounds(0, 0, mClearDrawable.getIntrinsicWidth(), mClearDrawable.getIntrinsicHeight());
setClearIconVisible(false);
this.setOnFocusChangeListener(this);
this.addTextChangedListener(this);
}
/**
* 當輸入框里面內容發生變化的時候回調的方法
*/
@Override
public void onTextChanged(CharSequence s, int start, int count, int after) {
setClearIconVisible(s.length() > 0);
}
/**
* 設置清除圖標的顯示與隱藏,調用setCompoundDrawables為EditText繪制上去
* @param visible
*/
protected void setClearIconVisible(boolean visible) {
Drawable right = visible ? mClearDrawable : null;
setCompoundDrawables(getCompoundDrawables()[0],
getCompoundDrawables()[1], right, getCompoundDrawables()[3]);
}
/**
* 因為我們不能直接給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 (hasFocus) {
setClearIconVisible(getText().length() > 0);
} else {
setClearIconVisible(false);
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
/**
* 設置晃動動畫
*/
public void setShakeAnimation() {
this.startAnimation(shakeAnimation(3));
}
/**
* 晃動動畫
* @param counts 半秒鐘晃動多少下
* @return
*/
public static Animation shakeAnimation(int counts) {
Animation translateAnimation = new TranslateAnimation(0, 10, 0, 0);
translateAnimation.setInterpolator(new CycleInterpolator(counts));
translateAnimation.setDuration(500);
return translateAnimation;
}
public Drawable getClearDrawable() {
return mClearDrawable;
}
public void setClearDrawable(Drawable mClearDrawable) {
this.mClearDrawable = mClearDrawable;
}
}
2. 使用
<!--輸入框-->
<com.example.xingchouwang.view.customView.ClearWriteEditText
android:id="@+id/login_et_name"
style="@style/style_edittext"
android:layout_width="match_parent"
android:layout_marginLeft="@dimen/x3"
android:layout_marginRight="@dimen/x3"
android:layout_toRightOf="@id/iv_syncOperatorImg"
android:hint="手機號"
android:imeOptions="actionNext"
android:inputType="number"
android:paddingLeft="@dimen/y6" />
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。