Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(501)

Side by Side Diff: chrome/android/java_staging/src/org/chromium/chrome/browser/widget/NumberRollView.java

Issue 1141283003: Upstream oodles of Chrome for Android code into Chromium. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: final patch? Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 package org.chromium.chrome.browser.widget;
6
7 import android.animation.Animator;
8 import android.animation.ObjectAnimator;
9 import android.content.Context;
10 import android.util.AttributeSet;
11 import android.util.Property;
12 import android.widget.FrameLayout;
13 import android.widget.TextView;
14
15 import com.google.android.apps.chrome.R;
16
17 import org.chromium.ui.interpolators.BakedBezierInterpolator;
18
19 import java.text.NumberFormat;
20
21 /**
22 * View that shows an integer number. It provides a smooth roll animation on cha nging the
23 * number.
24 */
25 public class NumberRollView extends FrameLayout {
26 private TextView mUpNumber;
27 private TextView mDownNumber;
28 private float mNumber;
29 private Animator mLastRollAnimator;
30
31 /**
32 * A Property wrapper around the <code>number</code> functionality handled b y the
33 * {@link NumberRollView#setNumberRoll(float)} and {@link NumberRollView#get NumberRoll()}
34 * methods.
35 */
36 public static final Property<NumberRollView, Float> NUMBER_PROPERTY =
37 new Property<NumberRollView, Float>(Float.class, "") {
38 @Override
39 public void set(NumberRollView view, Float value) {
40 view.setNumberRoll(value);
41 }
42
43 @Override
44 public Float get(NumberRollView view) {
45 return view.getNumberRoll();
46 }
47 };
48
49 /**
50 * Constructor for inflating from XML.
51 */
52 public NumberRollView(Context context, AttributeSet attrs) {
53 super(context, attrs);
54 }
55
56 @Override
57 protected void onFinishInflate() {
58 super.onFinishInflate();
59 mUpNumber = (TextView) findViewById(R.id.up);
60 mDownNumber = (TextView) findViewById(R.id.down);
61
62 assert mUpNumber != null;
63 assert mDownNumber != null;
64
65 setNumberRoll(mNumber);
66 }
67
68 /**
69 * Sets a number to display.
70 * @param animate Whether it should smoothly animate to the number.
71 */
72 public void setNumber(int number, boolean animate) {
73 if (mLastRollAnimator != null) mLastRollAnimator.cancel();
74
75 if (animate) {
76 Animator rollAnimator = ObjectAnimator.ofFloat(this, NUMBER_PROPERTY , number);
77 rollAnimator.setInterpolator(BakedBezierInterpolator.TRANSFORM_CURVE );
78 rollAnimator.start();
79 mLastRollAnimator = rollAnimator;
80 } else {
81 setNumberRoll(number);
82 }
83 }
84
85 /**
86 * Gets the current number roll position.
87 */
88 private float getNumberRoll() {
89 return mNumber;
90 }
91
92 /**
93 * Sets the number roll position.
94 */
95 private void setNumberRoll(float number) {
96 mNumber = number;
97 int downNumber = (int) number;
98 int upNumber = downNumber + 1;
99
100 NumberFormat numberFormatter = NumberFormat.getIntegerInstance();
101 String newString = numberFormatter.format(upNumber);
102 if (!newString.equals(mUpNumber.getText().toString())) mUpNumber.setText (newString);
103
104 newString = numberFormatter.format(downNumber);
105 if (!newString.equals(mDownNumber.getText().toString())) mDownNumber.set Text(newString);
106
107 float offset = number % 1.0f;
108
109 mUpNumber.setTranslationY(mUpNumber.getHeight() * (offset - 1.0f));
110 mDownNumber.setTranslationY(mDownNumber.getHeight() * offset);
111
112 mUpNumber.setAlpha(offset);
113 mDownNumber.setAlpha(1.0f - offset);
114 }
115 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698