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
This commit is contained in:
Winson Chung
2011-07-19 15:47:55 -07:00
parent 95383fe41d
commit 32174c878c
12 changed files with 133 additions and 80 deletions
+67 -16
View File
@@ -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();
}