summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJustin Klaassen <justinklaassen@google.com>2014-06-09 18:42:40 +0100
committerJustin Klaassen <justinklaassen@google.com>2014-06-10 06:31:11 -0700
commitfed941a1b4b2a3a011b8a17f486060f593db2f3c (patch)
treeabe0fb5971b92a3a18bc370c22f51588e50df268 /src
parente53cef820f01657e852dda00a3ce5f62a7a243cf (diff)
downloadCalculator-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.java34
-rw-r--r--src/com/android/calculator2/CalculatorEditText.java20
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);
+ }
}