国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android自定義控件EditText實現清除和抖動功能

2019-10-22 18:20:56
字體:
來源:轉載
供稿:網友

本文實例為大家分享了Android EditText實現清除和抖動功能的具體代碼,供大家參考,具體內容如下

源碼如下:

public class ClearEditText extends EditText implements View.OnFocusChangeListener,TextWatcher {  /   * 刪除按鈕的引用   */  private Drawable mClearDrawable;  /   * 控件是否有焦點   */  private boolean hasFoucs;   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);   init();  }  private void init() {   // 獲取EditText的DrawableRight,假如沒有設置我們就使用默認的圖片,2是獲得右邊的圖片 順序是左上右下(0,1,2,3,)   mClearDrawable = getCompoundDrawables()[2];   if (mClearDrawable == null) {    // throw new    // NullPointerException("You can add drawableRight attribute in XML");    mClearDrawable = getResources().getDrawable(R.drawable.icon_clear_input);   }    mClearDrawable.setBounds(0, 0, mClearDrawable.getIntrinsicWidth(),mClearDrawable.getIntrinsicHeight());   // 默認設置隱藏圖標   setClearIconVisible(false);   // 設置焦點改變的監聽   setOnFocusChangeListener(this);   // 設置輸入框里面內容發生改變的監聽   addTextChangedListener(this);  }   /   * 因為我們不能直接給EditText設置點擊事件,所以我們用記住我們按下的位置來模擬點擊事件 當我們按下的位置 在 EditText的寬度 -   * 圖標到控件右邊的間距 - 圖標的寬度 和 EditText的寬度 - 圖標到控件右邊的間距之間我們就算點擊了圖標,豎直方向就沒有考慮   */  @Override  public boolean onTouchEvent(MotionEvent event) {   if (event.getAction() == MotionEvent.ACTION_UP) {    if (getCompoundDrawables()[2] != null) {     boolean touchable = event.getX() > (getWidth() - getTotalPaddingRight())&& (event.getX() < ((getWidth() - getPaddingRight())));     if (touchable) {      this.setText("");     }    }   }   return super.onTouchEvent(event);  }   /   * 當ClearEditText焦點發生變化的時候,判斷里面字符串長度設置清除圖標的顯示與隱藏   */  @Override  public void onFocusChange(View v, boolean hasFocus) {   this.hasFoucs = hasFocus;   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 (hasFoucs) {    setClearIconVisible(s.length() > 0);   }  }   @Override  public void beforeTextChanged(CharSequence s, int start, int count,int after) {   }   @Override  public void afterTextChanged(Editable s) {   }   /   * 設置晃動動畫   */  public void setShakeAnimation() {   this.startAnimation(shakeAnimation(5));  }   /   * 晃動動畫   *   * @param counts   *   1秒鐘晃動多少下   * @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;  }  } 

使用方法同普通的EditText:

<com.example.clearedittext.ClearEditText      android:id="@+id/username"      android:layout_marginTop="60dp"      android:layout_width="fill_parent"      android:background="@drawable/login_edittext_bg"       android:drawableLeft="@drawable/icon_user"      android:layout_marginLeft="10dip"      android:layout_marginRight="10dip"      android:singleLine="true"      android:drawableRight="@drawable/delete_selector"      android:hint="輸入用戶名"      android:layout_height="wrap_content" /> 

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 来凤县| 鄂伦春自治旗| 宁海县| 科技| 柘城县| 柞水县| 伊春市| 清远市| 宁国市| 密山市| 时尚| 台南县| 宁南县| 德兴市| 绍兴县| 洛阳市| 望江县| 获嘉县| 邯郸县| 本溪市| 岳普湖县| 临邑县| 洛川县| 克什克腾旗| 绍兴市| 莱阳市| 阿巴嘎旗| 潜江市| 阜新市| 赤水市| 通辽市| 西和县| 荔浦县| 高唐县| 内丘县| 福清市| 连城县| 凤山县| 永州市| 夏邑县| 苏州市|