Browse Source

解决冲突

SpringBoots 8 years ago
parent
commit
4b302bf072

+ 163 - 0
app_core/common/src/main/java/com/core/widget/ClearEditText.java~HEAD

@@ -0,0 +1,163 @@
+package com.core.widget;
+
+import android.content.Context;
+import android.graphics.drawable.Drawable;
+import android.support.v4.view.MotionEventCompat;
+import android.text.Editable;
+import android.text.TextUtils;
+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;
+
+import com.core.app.R;
+
+
+public class ClearEditText extends EditText implements OnFocusChangeListener, TextWatcher {
+	/**
+	 * 删除按钮的引用
+	 */
+	private Drawable mClearDrawable;
+	private boolean mFocusClear = false;
+
+	public ClearEditText(Context context) {
+		this(context, null);
+	}
+
+	public ClearEditText(Context context, AttributeSet attrs) {
+		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,假如没有设置我们就使用默认的图片
+		mClearDrawable = getCompoundDrawables()[2];
+		if (mClearDrawable == null) {
+			mClearDrawable = getResources().getDrawable(R.drawable.search_clear);
+		}
+		mClearDrawable.setBounds(0, 0, mClearDrawable.getIntrinsicWidth(), mClearDrawable.getIntrinsicHeight());
+		setClearIconVisible(false);
+		setOnFocusChangeListener(this);
+		addTextChangedListener(this);
+	}
+
+	/**
+	 * 因为我们不能直接给EditText设置点击事件,所以我们用记住我们按下的位置来模拟点击事件 当我们按下的位置 在 EditText的宽度 - 图标到控件右边的间距 - 图标的宽度 和 EditText的宽度 - 图标到控件右边的间距之间我们就算点击了图标,竖直方向没有考虑
+	 */
+	@Override
+	public boolean onTouchEvent(MotionEvent event) {
+		int action = MotionEventCompat.getActionMasked(event);
+		if (action == MotionEvent.ACTION_DOWN) {
+			if (!TextUtils.isEmpty(getError())) {
+				setError(null, null);
+				setClearIconVisible(getText().length() > 0);
+				return false;
+			}
+		}
+
+		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 (mFocusClear) {
+			if (hasFocus) {
+				setClearIconVisible(getText().length() > 0);
+			} else {
+				setClearIconVisible(false);
+			}
+		}
+	}
+
+	/**
+	 * 当焦点改变的时候,显示或者隐藏Clear icon
+	 */
+	public void setFocusClear(boolean focusClear) {
+		mFocusClear = focusClear;
+	}
+
+	/**
+	 * 设置清除图标的显示与隐藏,调用setCompoundDrawables为EditText绘制上去
+	 * 
+	 * @param visible
+	 */
+	protected void setClearIconVisible(boolean visible) {
+		if (visible) {
+			if (!TextUtils.isEmpty(getError())) {
+				setError(null);
+			}
+		}
+		if (visible) {
+			if (mFocusClear && !hasFocus()) {
+				visible = false;
+			}
+		}
+		Drawable right = visible ? mClearDrawable : null;
+		if (getCompoundDrawables()[2] != right) {
+			setCompoundDrawables(getCompoundDrawables()[0], getCompoundDrawables()[1], null, getCompoundDrawables()[3]);
+		}
+		setCompoundDrawables(getCompoundDrawables()[0], getCompoundDrawables()[1], right, getCompoundDrawables()[3]);
+	}
+
+	/**
+	 * 当输入框里面内容发生变化的时候回调的方法
+	 */
+	@Override
+	public void onTextChanged(CharSequence s, int start, int count, int after) {
+		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.setAnimation(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(1000);
+		return translateAnimation;
+	}
+
+}

+ 29 - 0
app_core/common/src/main/res/anim/input_method_enter.xml

@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/* //device/apps/common/res/anim/fade_in.xml
+**
+** Copyright 2007, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License"); 
+** you may not use this file except in compliance with the License. 
+** You may obtain a copy of the License at 
+**
+**     http://www.apache.org/licenses/LICENSE-2.0 
+**
+** Unless required by applicable law or agreed to in writing, software 
+** distributed under the License is distributed on an "AS IS" BASIS, 
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+** See the License for the specific language governing permissions and 
+** limitations under the License.
+*/
+-->
+
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+		android:shareInterpolator="false">
+    <translate android:fromYDelta="10%" android:toYDelta="0"
+	        android:interpolator="@interpolator/decelerate_quint"
+            android:duration="@android:integer/config_shortAnimTime"/>
+    <alpha android:fromAlpha="0.5" android:toAlpha="1.0"
+			android:interpolator="@interpolator/decelerate_cubic"
+            android:duration="@android:integer/config_shortAnimTime" />
+</set>