From 32174c878c77b4e0f13449f4c26ff6b487bc7ca6 Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Tue, 19 Jul 2011 15:47:55 -0700 Subject: Fxing issues with the scroll bar - Removing track from AllApps - Scrollbar should reach edge of track now - Fixing flashing when going from AppsCustomize to workspace and switching tabs in AppsCustomize Change-Id: Id69bd04dc503608566c3a33a1344904e3db383bf --- .../android/launcher2/AppsCustomizeTabHost.java | 4 ++ src/com/android/launcher2/Launcher.java | 26 +++---- src/com/android/launcher2/PagedView.java | 83 +++++++++++++++++----- src/com/android/launcher2/Workspace.java | 7 ++ 4 files changed, 92 insertions(+), 28 deletions(-) (limited to 'src/com/android') diff --git a/src/com/android/launcher2/AppsCustomizeTabHost.java b/src/com/android/launcher2/AppsCustomizeTabHost.java index 262358600..ed408df48 100644 --- a/src/com/android/launcher2/AppsCustomizeTabHost.java +++ b/src/com/android/launcher2/AppsCustomizeTabHost.java @@ -146,6 +146,10 @@ public class AppsCustomizeTabHost extends TabHost implements LauncherTransitiona ObjectAnimator anim = ObjectAnimator.ofFloat(mAppsCustomizePane, "alpha", 0f); anim.setDuration(duration); anim.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationStart(android.animation.Animator animation) { + mAppsCustomizePane.hideScrollingIndicator(false); + } @Override public void onAnimationEnd(android.animation.Animator animation) { mAppsCustomizePane.setContentType(type); diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java index 489f3fbb8..7341e7133 100644 --- a/src/com/android/launcher2/Launcher.java +++ b/src/com/android/launcher2/Launcher.java @@ -2388,12 +2388,6 @@ public final class Launcher extends Activity toView.setTranslationY(0.0f); toView.setVisibility(View.VISIBLE); toView.bringToFront(); - - if (!springLoaded && !LauncherApplication.isScreenLarge()) { - // Hide the workspace scrollbar - mWorkspace.hideScrollingIndicator(true); - mWorkspace.hideScrollIndicatorTrack(); - } } @Override public void onAnimationEnd(Animator animation) { @@ -2405,6 +2399,12 @@ public final class Launcher extends Activity if (toView instanceof LauncherTransitionable) { ((LauncherTransitionable) toView).onLauncherTransitionEnd(scaleAnim); } + + if (!springLoaded && !LauncherApplication.isScreenLarge()) { + // Hide the workspace scrollbar + mWorkspace.hideScrollingIndicator(true); + mWorkspace.hideScrollIndicatorTrack(); + } } }); @@ -2483,17 +2483,19 @@ public final class Launcher extends Activity ((LauncherTransitionable) fromView).onLauncherTransitionStart(alphaAnim); } alphaAnim.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationStart(android.animation.Animator animation) { + if (!springLoaded && !LauncherApplication.isScreenLarge()) { + // Show the workspace scrollbar + mWorkspace.showScrollIndicatorTrack(); + mWorkspace.flashScrollingIndicator(); + } + } @Override public void onAnimationEnd(Animator animation) { fromView.setVisibility(View.GONE); if (fromView instanceof LauncherTransitionable) { ((LauncherTransitionable) fromView).onLauncherTransitionEnd(alphaAnim); - - if (!springLoaded && !LauncherApplication.isScreenLarge()) { - // Show the workspace scrollbar - mWorkspace.showScrollIndicatorTrack(); - mWorkspace.flashScrollingIndicator(); - } } } }); diff --git a/src/com/android/launcher2/PagedView.java b/src/com/android/launcher2/PagedView.java index 9ef1fa8ef..bed107a1f 100644 --- a/src/com/android/launcher2/PagedView.java +++ b/src/com/android/launcher2/PagedView.java @@ -161,11 +161,11 @@ public abstract class PagedView extends ViewGroup { protected boolean mIsDataReady = false; // Scrolling indicator + private android.animation.ValueAnimator mScrollIndicatorAnimator; private ImageView mScrollIndicator; private ImageView mScrollTrack; private boolean mHasScrollIndicator = true; private static final int sScrollIndicatorFadeInDuration = 150; - private static final int sScrollIndicatorFastFadeOutDuration = 50; private static final int sScrollIndicatorFadeOutDuration = 650; private static final int sScrollIndicatorFlashDuration = 650; @@ -260,10 +260,6 @@ public abstract class PagedView extends ViewGroup { return getChildAt(index); } - int getScrollWidth() { - return getWidth(); - } - /** * Updates the scroll of the current page immediately to its final scroll position. We use this * in CustomizePagedView to allow tabs to share the same PagedView while resetting the scroll of @@ -1676,7 +1672,13 @@ public abstract class PagedView extends ViewGroup { if (mScrollIndicator != null) { // Fade the indicator in updateScrollingIndicatorPosition(); - mScrollIndicator.animate().alpha(1f).setDuration(sScrollIndicatorFadeInDuration).start(); + mScrollIndicator.setVisibility(View.VISIBLE); + if (mScrollIndicatorAnimator != null) { + mScrollIndicatorAnimator.cancel(); + } + mScrollIndicatorAnimator = ObjectAnimator.ofFloat(mScrollIndicator, "alpha", 1f); + mScrollIndicatorAnimator.setDuration(sScrollIndicatorFadeInDuration); + mScrollIndicatorAnimator.start(); } } @@ -1688,11 +1690,41 @@ public abstract class PagedView extends ViewGroup { if (mScrollIndicator != null) { // Fade the indicator out updateScrollingIndicatorPosition(); - mScrollIndicator.animate().alpha(0f).setDuration(immediately ? - sScrollIndicatorFastFadeOutDuration : sScrollIndicatorFadeOutDuration).start(); + if (mScrollIndicatorAnimator != null) { + mScrollIndicatorAnimator.cancel(); + } + if (immediately) { + mScrollIndicator.setVisibility(View.GONE); + mScrollIndicator.setAlpha(0f); + } else { + mScrollIndicatorAnimator = ObjectAnimator.ofFloat(mScrollIndicator, "alpha", 0f); + mScrollIndicatorAnimator.setDuration(sScrollIndicatorFadeOutDuration); + mScrollIndicatorAnimator.addListener(new AnimatorListenerAdapter() { + private boolean cancelled = false; + @Override + public void onAnimationCancel(android.animation.Animator animation) { + cancelled = true; + } + @Override + public void onAnimationEnd(Animator animation) { + if (!cancelled) { + mScrollIndicator.setVisibility(View.GONE); + } + } + }); + mScrollIndicatorAnimator.start(); + } } } + /** + * To be overridden by subclasses to determine whether the scroll indicator should stretch to + * fill its space on the track or not. + */ + protected boolean hasElasticScrollIndicator() { + return false; + } + private void updateScrollingIndicator() { if (getChildCount() <= 1) return; if (!isScrollingIndicatorEnabled()) return; @@ -1706,16 +1738,35 @@ public abstract class PagedView extends ViewGroup { private void updateScrollingIndicatorPosition() { if (!isScrollingIndicatorEnabled()) return; - // We can make the page width smaller to make it look more centered + int numPages = getChildCount(); + int pageWidth = getMeasuredWidth(); + int maxPageWidth = (numPages * getMeasuredWidth()) + ((numPages - 1) * mPageSpacing); + int trackWidth = pageWidth; + int indicatorWidth = mScrollIndicator.getMeasuredWidth() - + mScrollIndicator.getPaddingLeft() - mScrollIndicator.getPaddingRight(); + int paddingLeft = 0; + int paddingRight = 0; + + // Get the track properties getScrollingIndicatorTrack(); - int pageWidth = mScrollTrack.getMeasuredWidth() - mScrollTrack.getPaddingLeft() - - mScrollTrack.getPaddingRight(); - int maxPageWidth = getChildCount() * getMeasuredWidth(); + if (mScrollTrack != null) { + paddingLeft = mScrollTrack.getPaddingLeft(); + paddingRight = mScrollTrack.getPaddingRight(); + trackWidth = mScrollTrack.getMeasuredWidth() - paddingLeft - paddingRight; + } + float offset = (float) getScrollX() / maxPageWidth; - int indicatorWidth = pageWidth / getChildCount(); - int indicatorCenterOffset = indicatorWidth / 2 - mScrollIndicator.getMeasuredWidth() / 2; - int indicatorPos = (int) (offset * pageWidth) + mScrollTrack.getPaddingLeft() + - indicatorCenterOffset; + int indicatorSpace = trackWidth / numPages; + int indicatorPos = (int) (offset * trackWidth) + paddingLeft; + if (hasElasticScrollIndicator()) { + if (mScrollIndicator.getMeasuredWidth() != indicatorSpace) { + mScrollIndicator.getLayoutParams().width = indicatorSpace; + mScrollIndicator.requestLayout(); + } + } else { + int indicatorCenterOffset = indicatorSpace / 2 - indicatorWidth / 2; + indicatorPos += indicatorCenterOffset; + } mScrollIndicator.setTranslationX(indicatorPos); mScrollIndicator.invalidate(); } diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java index ba290d3f2..d79158d61 100644 --- a/src/com/android/launcher2/Workspace.java +++ b/src/com/android/launcher2/Workspace.java @@ -3339,4 +3339,11 @@ public class Workspace extends SmoothPagedView public void getLocationInDragLayer(int[] loc) { mLauncher.getDragLayer().getLocationInDragLayer(this, loc); } + + /** + * Return true because we want the scrolling indicator to stretch to fit the space. + */ + protected boolean hasElasticScrollIndicator() { + return true; + } } -- cgit v1.2.3