Android 自定义View、ViewGroup 实战训练之ClearEditText

来源:互联网 发布:apache开启https 编辑:程序博客网 时间:2024/05/16 15:20

自定义ClearEditText用的场景还是比较多的,比如搜索框、登陆界面都可能用到,下面我们就来动手做一个!如果你看着有点吃力,建议先看我上一篇文章Android 自定义View、ViewGroup(二)之绘制流程

1.自定义View其中的一种形式就是继承现有的控件EditText,重写构造方法。

   public ClearEditText(Context context) {        super(context);        init();    }    public ClearEditText(Context context, AttributeSet attrs) {        super(context, attrs);        init();    }    public ClearEditText(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        init();    }
2.我们来看一下init方法

    public void init() {        //  获取输入框上下左右组成的一个drawable数组 drawables[left, top, right,bottom]        Drawable[] drawables = this.getCompoundDrawables();        mRightDrawable = drawables[2];        // 设置获取焦点的监听        setOnFocusChangeListener(this);         // 设置文本变化的监听        addTextChangedListener(this);        setClearDrawableVisible(false);    }
3,  通过触摸的范围来确定是否点击了删除按钮

    @Override    public boolean onTouchEvent(MotionEvent event) {        switch (event.getAction()) {            case MotionEvent.ACTION_UP:                boolean isClean = (event.getX() > (getWidth() - getTotalPaddingRight())) && (event.getX() < (getWidth() - getPaddingRight()));                if (isClean)                    setText("");                break;        }        return super.onTouchEvent(event);    }


4. 设置删除按钮的隐藏和显示

private void setClearDrawableVisible(boolean isVisible) {     setCompoundDrawables(getCompoundDrawables()[0], getCompoundDrawables()[1], isVisible ? mRightDrawable : null, getCompoundDrawables()[3]);}

5.如果输入的为空,就播放一个动画

 public void setShakeAnimation(){        this.setAnimation(shakeAnimation(5));    }    public Animation shakeAnimation(int CycleTimes) {        Animation translateAnimation = new TranslateAnimation(0, 10, 0, 10);        //设置动画插入器        translateAnimation.setInterpolator(new CycleInterpolator(CycleTimes));        translateAnimation.setDuration(1000);        return translateAnimation;    }

下载Demo请猛戳





0 0
原创粉丝点击