From fc4d01714fbf3151da3e8cf46d0f5bc04b9a0979 Mon Sep 17 00:00:00 2001 From: Dmitriy Puzak Date: Wed, 10 Dec 2014 21:56:21 +0200 Subject: [PATCH 1/2] add animation saved state --- .../FloatingHintEditText.java | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/floatinghintedittext/src/main/java/com/thebnich/floatinghintedittext/FloatingHintEditText.java b/floatinghintedittext/src/main/java/com/thebnich/floatinghintedittext/FloatingHintEditText.java index aafc9a4..0260c0d 100644 --- a/floatinghintedittext/src/main/java/com/thebnich/floatinghintedittext/FloatingHintEditText.java +++ b/floatinghintedittext/src/main/java/com/thebnich/floatinghintedittext/FloatingHintEditText.java @@ -6,6 +6,8 @@ import android.graphics.Color; import android.graphics.Paint; import android.graphics.Paint.FontMetricsInt; +import android.os.Bundle; +import android.os.Parcelable; import android.text.TextUtils; import android.util.AttributeSet; import android.util.TypedValue; @@ -14,6 +16,9 @@ public class FloatingHintEditText extends EditText { private static enum Animation { NONE, SHRINK, GROW } + public static final String ARG_SUPER_STATE = "arg_super_state"; + public static final String ARG_TEXT_CHANGED_STATE= "arg_text_changed_state"; + private final Paint mFloatingHintPaint = new Paint(); private final ColorStateList mHintColors; private final float mHintScale; @@ -130,7 +135,7 @@ protected void onDraw(Canvas canvas) { } private void drawAnimationFrame(Canvas canvas, float fromSize, float toSize, - float hintPosX, float fromY, float toY) { + float hintPosX, float fromY, float toY) { final float textSize = lerp(fromSize, toSize); final float hintPosY = lerp(fromY, toY); mFloatingHintPaint.setTextSize(textSize); @@ -141,4 +146,19 @@ private float lerp(float from, float to) { final float alpha = (float) mAnimationFrame / (mAnimationSteps - 1); return from * (1 - alpha) + to * alpha; } -} + + @Override + public Parcelable onSaveInstanceState() { + Bundle bundle = new Bundle(); + bundle.putParcelable(ARG_SUPER_STATE, super.onSaveInstanceState()); + bundle.putBoolean(ARG_TEXT_CHANGED_STATE, mWasEmpty); + return bundle; + } + + @Override + public void onRestoreInstanceState(Parcelable state) { + Bundle bundle = (Bundle) state; + mWasEmpty = bundle.getBoolean(ARG_SUPER_STATE); + super.onRestoreInstanceState(bundle.getParcelable(ARG_TEXT_CHANGED_STATE)); + } +} \ No newline at end of file From c143134a90e2f898187fd71afb168bddbb928135 Mon Sep 17 00:00:00 2001 From: Dmitriy Puzak Date: Wed, 10 Dec 2014 21:59:22 +0200 Subject: [PATCH 2/2] add divide optional padding between text and float label --- .../FloatingHintEditText.java | 24 ++++++++++++++----- .../src/main/res/values/attrs.xml | 5 ++++ .../src/main/res/values/dimens.xml | 6 ----- 3 files changed, 23 insertions(+), 12 deletions(-) delete mode 100644 floatinghintedittext/src/main/res/values/dimens.xml diff --git a/floatinghintedittext/src/main/java/com/thebnich/floatinghintedittext/FloatingHintEditText.java b/floatinghintedittext/src/main/java/com/thebnich/floatinghintedittext/FloatingHintEditText.java index 0260c0d..19db1ae 100644 --- a/floatinghintedittext/src/main/java/com/thebnich/floatinghintedittext/FloatingHintEditText.java +++ b/floatinghintedittext/src/main/java/com/thebnich/floatinghintedittext/FloatingHintEditText.java @@ -2,6 +2,7 @@ import android.content.Context; import android.content.res.ColorStateList; +import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; @@ -19,6 +20,10 @@ private static enum Animation { NONE, SHRINK, GROW } public static final String ARG_SUPER_STATE = "arg_super_state"; public static final String ARG_TEXT_CHANGED_STATE= "arg_text_changed_state"; + private static final int DEFAULT_DIVIDE_PADDING = 5; + private static final int DEFAULT_ANIMATION_STEPS = 6; + private static final float DEFAULT_HINT_SCALE = 0.6f; + private final Paint mFloatingHintPaint = new Paint(); private final ColorStateList mHintColors; private final float mHintScale; @@ -26,6 +31,7 @@ private static enum Animation { NONE, SHRINK, GROW } private boolean mWasEmpty; private int mAnimationFrame; + private int mLabelPadding; private Animation mAnimation = Animation.NONE; public FloatingHintEditText(Context context) { @@ -39,10 +45,16 @@ public FloatingHintEditText(Context context, AttributeSet attrs) { public FloatingHintEditText(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); - TypedValue typedValue = new TypedValue(); - getResources().getValue(R.dimen.floatinghintedittext_hint_scale, typedValue, true); - mHintScale = typedValue.getFloat(); - mAnimationSteps = getResources().getInteger(R.dimen.floatinghintedittext_animation_steps); + int defaultLabelPadding = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, DEFAULT_DIVIDE_PADDING, getResources().getDisplayMetrics()); + + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.FloatLabelView); + try { + mLabelPadding = a.getDimensionPixelOffset(R.styleable.FloatLabelView_dividePadding, defaultLabelPadding); + mAnimationSteps = a.getInt(R.styleable.FloatLabelView_animationSteps, DEFAULT_ANIMATION_STEPS); + mHintScale = a.getFloat(R.styleable.FloatLabelView_hintScale, DEFAULT_HINT_SCALE); + } finally { + a.recycle(); + } mHintColors = getHintTextColors(); mWasEmpty = TextUtils.isEmpty(getText()); @@ -51,7 +63,7 @@ public FloatingHintEditText(Context context, AttributeSet attrs, int defStyle) { @Override public int getCompoundPaddingTop() { final FontMetricsInt metrics = getPaint().getFontMetricsInt(); - final int floatingHintHeight = (int) ((metrics.bottom - metrics.top) * mHintScale); + final int floatingHintHeight = (int) ((metrics.bottom - metrics.top) * mHintScale) + mLabelPadding; return super.getCompoundPaddingTop() + floatingHintHeight; } @@ -102,7 +114,7 @@ protected void onDraw(Canvas canvas) { final float hintPosX = getCompoundPaddingLeft() + getScrollX(); final float normalHintPosY = getBaseline(); - final float floatingHintPosY = normalHintPosY + getPaint().getFontMetricsInt().top + getScrollY(); + final float floatingHintPosY = normalHintPosY + getPaint().getFontMetricsInt().top + getScrollY() - mLabelPadding; final float normalHintSize = getTextSize(); final float floatingHintSize = normalHintSize * mHintScale; diff --git a/floatinghintedittext/src/main/res/values/attrs.xml b/floatinghintedittext/src/main/res/values/attrs.xml index 03ea9ec..1dd24fc 100644 --- a/floatinghintedittext/src/main/res/values/attrs.xml +++ b/floatinghintedittext/src/main/res/values/attrs.xml @@ -1,4 +1,9 @@ + + + + + \ No newline at end of file diff --git a/floatinghintedittext/src/main/res/values/dimens.xml b/floatinghintedittext/src/main/res/values/dimens.xml deleted file mode 100644 index 91c7713..0000000 --- a/floatinghintedittext/src/main/res/values/dimens.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - 0.6 - 6 - -