Android开发之自定义控件与属性动画Animation的结合使用

一样的,V4包,eclipse上开发,笔者是根据一位叫做yayun0516的博主进行学习以及实现,除此之外再发表自己的一些见解以及增加合适的备注。 这个想法最近另笔者特别好奇以及羡慕,自定义控件的熟悉使用应该对一名Android开发者有较高的资历和能力要求,再加上与属性动画的使用,更是大大的提高了用户的体验度,嗯,废话不多说,贴代码和效果图~


MineActivity.java类,也就是重写EditText,

public class MineActivity extends EditText {
	private Drawable mRightDrawable;
	private Boolean isHasFocus;

	public MineActivity(Context context) {
		// 回调父类方法
		super(context);
		initView();
	}

	// AttributeSet用来完成控件类构造函数,并在构造函数中将自定义控件类中变量与attrs.xml中的属性连接起来
	public MineActivity(Context context, AttributeSet attributeSet) {
		super(context, attributeSet);
		initView();

	}

	public MineActivity(Context context, AttributeSet attributeSet, int defstyle) {
		super(context, attributeSet, defstyle);
		initView();

	}

	private void initView() {

		// Returns drawables for the left, top, right, and bottom borders.
		Drawable[] drawables = this.getCompoundDrawables();

		// 取得right位置的Drawable
		// 即我们在布局文件中设置的android:drawableRight
		mRightDrawable = drawables[2];

		// 焦点变化监听
		this.setOnFocusChangeListener(new FocusChangeListenerImpl());
		// 设置文字变化监听
		this.addTextChangedListener(new TextWatcherImpl());
		// 初始化时让右边clean图标不可见
		setClearDrawableVisible(false);

	}
	
	

    private class FocusChangeListenerImpl implements OnFocusChangeListener {
        public void onFocusChange(View v, boolean hasFocus) {
            isHasFocus = hasFocus;
            if (isHasFocus) {
                boolean isVisible = getText().toString().length() >= 1;
                setClearDrawableVisible(isVisible);
            } else {
                setClearDrawableVisible(false);
            }
        }

    }

    // 当输入结束后判断是否显示右边clean的图标,一样的焦点判断
    private class TextWatcherImpl implements TextWatcher {
        public void afterTextChanged(Editable s) {
            boolean isVisible = getText().toString().length() >= 1;
            setClearDrawableVisible(isVisible);
        }

        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {

        }

        public void onTextChanged(CharSequence s, int start, int before,
                int count) {

        }

    }

    // 隐藏或显示右边clean的图标,很简单的焦点判断
    protected void setClearDrawableVisible(boolean isVisible) {
        Drawable rightDrawable;
        if (isVisible) {
            rightDrawable = mRightDrawable;
        } else {
            rightDrawable = null;
        }
        // 使用代码设置该控件left, top, right, and bottom处的图标
        setCompoundDrawables(getCompoundDrawables()[0],
                getCompoundDrawables()[1], rightDrawable,
                getCompoundDrawables()[3]);
    }

    // 显示动画
    public void setShakeAnimation() {
    	//调用shakeAnimation
        this.startAnimation(shakeAnimation(5));

    }

    // CycleTimes动画重复的次数
    public Animation shakeAnimation(int CycleTimes) {
    	//移动位置
        Animation translateAnimation = new TranslateAnimation(0, 10, 0, 10);
        translateAnimation.setInterpolator(new CycleInterpolator(CycleTimes));
        //重复时间
        translateAnimation.setDuration(500);
        return translateAnimation;
    }
}


MainActivity.java:

public class MainActivity extends Activity {

	private MineActivity usernameDeletableEditText;
    private MineActivity passwordDeletableEditText;
    private Button btn_logButton;

	
	
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        usernameDeletableEditText=(MineActivity)findViewById(R.id.det_test);
        passwordDeletableEditText=(MineActivity)findViewById(R.id.user_password_input);
        btn_logButton=(Button)findViewById(R.id.btn_login);
        btn_logButton.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                String string1=usernameDeletableEditText.getText().toString();
                String string2=passwordDeletableEditText.getText().toString();
                if(TextUtils.isEmpty(string1)){
                    usernameDeletableEditText.setShakeAnimation();//设置动画
                }else if(TextUtils.isEmpty(string2)){
                    passwordDeletableEditText.setShakeAnimation();//设置动画
                }

            }
        });



}
}


activity_main.xml:



    

    

    

    



不会制作gif动画~直接贴工程吧~


你可能感兴趣的:(Android记录)