summaryrefslogtreecommitdiff
path: root/core/java/android/widget/StackView.java
diff options
context:
space:
mode:
authorAdam Cohen <adamcohen@google.com>2010-09-09 18:48:09 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2010-09-09 18:48:09 -0700
commit1a28bbb99da5035cb95744a5430d88b0d7ff4ff6 (patch)
treef7147709e856dadc8a95d10ed4f5b40e0221d107 /core/java/android/widget/StackView.java
parent2f803bea32b85419eca0101c25190853a548376c (diff)
parentf04e22571f17bf850ef89adddf2b12171e536619 (diff)
Merge "Fixing a bug where StackView wasn't always laid out correctly upon loading"
Diffstat (limited to 'core/java/android/widget/StackView.java')
-rw-r--r--core/java/android/widget/StackView.java43
1 files changed, 28 insertions, 15 deletions
diff --git a/core/java/android/widget/StackView.java b/core/java/android/widget/StackView.java
index 0a979047fcbc..2aa0bc679ae7 100644
--- a/core/java/android/widget/StackView.java
+++ b/core/java/android/widget/StackView.java
@@ -215,27 +215,39 @@ public class StackView extends AdapterViewAnimator {
// Implement the faked perspective
if (toIndex != -1) {
- float maxPerpectiveShift = mViewHeight * PERSPECTIVE_SHIFT_FACTOR;
- int index = toIndex;
+ transformViewAtIndex(toIndex, view);
+ }
+ }
- if (toIndex == mNumActiveViews -1) index--;
+ private void transformViewAtIndex(int index, View view) {
+ float maxPerpectiveShift = mViewHeight * PERSPECTIVE_SHIFT_FACTOR;
- float r = (index * 1.0f) / (mNumActiveViews - 2);
+ if (index == mNumActiveViews -1) index--;
- float scale = 1 - PERSPECTIVE_SCALE_FACTOR * (1 - r);
- PropertyValuesHolder<Float> scaleX = new PropertyValuesHolder<Float>("scaleX", scale);
- PropertyValuesHolder<Float> scaleY = new PropertyValuesHolder<Float>("scaleY", scale);
+ float r = (index * 1.0f) / (mNumActiveViews - 2);
- r = (float) Math.pow(r, 2);
+ float scale = 1 - PERSPECTIVE_SCALE_FACTOR * (1 - r);
+ PropertyValuesHolder<Float> scaleX = new PropertyValuesHolder<Float>("scaleX", scale);
+ PropertyValuesHolder<Float> scaleY = new PropertyValuesHolder<Float>("scaleY", scale);
- int stackDirection = (mStackMode == ITEMS_SLIDE_UP) ? 1 : -1;
- float transY = -stackDirection * r * maxPerpectiveShift +
- stackDirection * (1 - scale) * (mViewHeight / 2.0f);
+ r = (float) Math.pow(r, 2);
- PropertyValuesHolder<Float> translationY =
- new PropertyValuesHolder<Float>("translationY", transY);
- ObjectAnimator pa = new ObjectAnimator(100, view, scaleX, scaleY, translationY);
- pa.start();
+ int stackDirection = (mStackMode == ITEMS_SLIDE_UP) ? 1 : -1;
+ float transY = -stackDirection * r * maxPerpectiveShift +
+ stackDirection * (1 - scale) * (mViewHeight / 2.0f);
+
+ PropertyValuesHolder<Float> translationY =
+ new PropertyValuesHolder<Float>("translationY", transY);
+ ObjectAnimator pa = new ObjectAnimator(100, view, scaleX, scaleY, translationY);
+ pa.start();
+ }
+
+ private void updateChildTransforms() {
+ for (int i = 0; i < mNumActiveViews - 1; i++) {
+ View v = getViewAtRelativeIndex(i);
+ if (v != null) {
+ transformViewAtIndex(i, v);
+ }
}
}
@@ -271,6 +283,7 @@ public class StackView extends AdapterViewAnimator {
private void onLayout() {
if (!mFirstLayoutHappened) {
mViewHeight = Math.round(SLIDE_UP_RATIO * getMeasuredHeight());
+ updateChildTransforms();
mSwipeThreshold = Math.round(SWIPE_THRESHOLD_RATIO * mViewHeight);
mFirstLayoutHappened = true;
}