diff options
author | Justin Klaassen <justinklaassen@google.com> | 2014-06-09 18:42:40 +0100 |
---|---|---|
committer | Justin Klaassen <justinklaassen@google.com> | 2014-06-10 06:31:11 -0700 |
commit | fed941a1b4b2a3a011b8a17f486060f593db2f3c (patch) | |
tree | abe0fb5971b92a3a18bc370c22f51588e50df268 /src | |
parent | e53cef820f01657e852dda00a3ce5f62a7a243cf (diff) | |
download | Calculator-fed941a1b4b2a3a011b8a17f486060f593db2f3c.tar.gz |
Provide animation when auto-scaling the font-size
Bug: 15287699
Change-Id: I5e7c5c3bdc96200efa6b4c6f221148647ff91e76
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/calculator2/CalculatorActivity.java | 34 | ||||
-rw-r--r-- | src/com/android/calculator2/CalculatorEditText.java | 20 |
2 files changed, 53 insertions, 1 deletions
diff --git a/src/com/android/calculator2/CalculatorActivity.java b/src/com/android/calculator2/CalculatorActivity.java index 5c47535..1600e3d 100644 --- a/src/com/android/calculator2/CalculatorActivity.java +++ b/src/com/android/calculator2/CalculatorActivity.java @@ -33,9 +33,13 @@ import android.view.View; import android.view.View.OnLongClickListener; import android.view.animation.AccelerateDecelerateInterpolator; import android.widget.Button; +import android.widget.TextView; + +import com.android.calculator2.CalculatorEditText.OnTextSizeChangeListener; +import com.android.calculator2.CalculatorExpressionEvaluator.EvaluateCallback; public class CalculatorActivity extends Activity - implements CalculatorExpressionEvaluator.EvaluateCallback, OnLongClickListener { + implements OnTextSizeChangeListener, EvaluateCallback, OnLongClickListener { public static final String CALCULATOR_ACTIVITY_CURRENT_STATE = CalculatorActivity.class.getSimpleName() + "_currentState"; @@ -89,6 +93,8 @@ public class CalculatorActivity extends Activity mFormulaEditText.setEditableFactory(new CalculatorExpressionBuilder.Factory(this)); mFormulaEditText.addTextChangedListener(mFormulaTextWatcher); + mFormulaEditText.setOnTextSizeChangeListener(this); + mDeleteButton.setOnLongClickListener(this); } @@ -199,6 +205,32 @@ public class CalculatorActivity extends Activity } } + @Override + public void onTextSizeChanged(final TextView textView, float oldSize) { + if (mCurrentState != CalculatorState.INPUT) { + // Only animate text changes that occur from user input. + return; + } + + // Calculate the values needed to perform the scale and translation animations, + // maintaining the same apparent baseline for the displayed text. + final float textScale = oldSize / textView.getTextSize(); + final float translationX = (1.0f - textScale) * + (textView.getWidth() / 2.0f - textView.getPaddingEnd()); + final float translationY = (1.0f - textScale) * + (textView.getHeight() / 2.0f - textView.getPaddingBottom()); + + final AnimatorSet animatorSet = new AnimatorSet(); + animatorSet.playTogether( + ObjectAnimator.ofFloat(textView, View.SCALE_X, textScale, 1.0f), + ObjectAnimator.ofFloat(textView, View.SCALE_Y, textScale, 1.0f), + ObjectAnimator.ofFloat(textView, View.TRANSLATION_X, translationX, 0.0f), + ObjectAnimator.ofFloat(textView, View.TRANSLATION_Y, translationY, 0.0f)); + animatorSet.setDuration(getResources().getInteger(android.R.integer.config_shortAnimTime)); + animatorSet.setInterpolator(new AccelerateDecelerateInterpolator()); + animatorSet.start(); + } + private void onClear(View sourceView) { final int[] clearLocation = new int[2]; sourceView.getLocationInWindow(clearLocation); diff --git a/src/com/android/calculator2/CalculatorEditText.java b/src/com/android/calculator2/CalculatorEditText.java index e31d571..63a5ae5 100644 --- a/src/com/android/calculator2/CalculatorEditText.java +++ b/src/com/android/calculator2/CalculatorEditText.java @@ -30,6 +30,7 @@ import android.view.Menu; import android.view.MenuItem; import android.view.MotionEvent; import android.widget.EditText; +import android.widget.TextView; public class CalculatorEditText extends EditText { @@ -60,6 +61,7 @@ public class CalculatorEditText extends EditText { private final float mStepTextSize; private int mWidthConstraint = -1; + private OnTextSizeChangeListener mOnTextSizeChangeListener; public CalculatorEditText(Context context) { this(context, null); @@ -126,6 +128,20 @@ public class CalculatorEditText extends EditText { setTextSize(TypedValue.COMPLEX_UNIT_PX, getVariableTextSize(text.toString())); } + @Override + public void setTextSize(int unit, float size) { + final float oldTextSize = getTextSize(); + super.setTextSize(unit, size); + + if (mOnTextSizeChangeListener != null && getTextSize() != oldTextSize) { + mOnTextSizeChangeListener.onTextSizeChanged(this, oldTextSize); + } + } + + public void setOnTextSizeChangeListener(OnTextSizeChangeListener listener) { + mOnTextSizeChangeListener = listener; + } + public float getVariableTextSize(String text) { if (mWidthConstraint < 0 || mMaximumTextSize <= mMinimumTextSize) { // Not measured, bail early. @@ -167,4 +183,8 @@ public class CalculatorEditText extends EditText { final FontMetricsInt fontMetrics = getPaint().getFontMetricsInt(); return super.getCompoundPaddingBottom() - Math.min(getPaddingBottom(), fontMetrics.descent); } + + public interface OnTextSizeChangeListener { + void onTextSizeChanged(TextView textView, float oldSize); + } } |