summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher2/PagedView.java
diff options
context:
space:
mode:
authorMichael Jurka <mikejurka@google.com>2010-11-23 16:23:58 -0800
committerMichael Jurka <mikejurka@google.com>2010-12-09 02:12:19 -0800
commitd3ef3065ab0941567c45e9aec98783138b623c68 (patch)
treebe6aeb8f76931cc504a8723824920e60d292b116 /src/com/android/launcher2/PagedView.java
parent120980bd00f5eecec5717f49a3d7db96571025a9 (diff)
downloadandroid_packages_apps_Trebuchet-d3ef3065ab0941567c45e9aec98783138b623c68.tar.gz
android_packages_apps_Trebuchet-d3ef3065ab0941567c45e9aec98783138b623c68.tar.bz2
android_packages_apps_Trebuchet-d3ef3065ab0941567c45e9aec98783138b623c68.zip
added spring loaded mode for adding items to workspace
Change-Id: Ie92294fe2b1d6697d84756a2fcea91a09f72825b
Diffstat (limited to 'src/com/android/launcher2/PagedView.java')
-rw-r--r--src/com/android/launcher2/PagedView.java63
1 files changed, 51 insertions, 12 deletions
diff --git a/src/com/android/launcher2/PagedView.java b/src/com/android/launcher2/PagedView.java
index fed0884c3..856507d64 100644
--- a/src/com/android/launcher2/PagedView.java
+++ b/src/com/android/launcher2/PagedView.java
@@ -110,6 +110,9 @@ public abstract class PagedView extends ViewGroup {
protected boolean mAllowOverScroll = true;
protected int mUnboundedScrollX;
+ // parameter that adjusts the layout to be optimized for CellLayouts with that scale factor
+ protected float mLayoutScale = 1.0f;
+
protected static final int INVALID_POINTER = -1;
protected int mActivePointerId = INVALID_POINTER;
@@ -268,7 +271,9 @@ public abstract class PagedView extends ViewGroup {
if (!mScroller.isFinished()) {
mScroller.abortAnimation();
}
- if (getChildCount() == 0 || currentPage == mCurrentPage) {
+ // don't introduce any checks like mCurrentPage == currentPage here-- if we change the
+ // the default
+ if (getChildCount() == 0) {
return;
}
@@ -445,6 +450,32 @@ public abstract class PagedView extends ViewGroup {
setCurrentPage(newCurrentPage);
}
+ // A layout scale of 1.0f assumes that the CellLayouts, in their unshrunken state, have a
+ // scale of 1.0f. A layout scale of 0.8f assumes the CellLayouts have a scale of 0.8f, and
+ // tightens the layout accordingly
+ public void setLayoutScale(float childrenScale) {
+ mLayoutScale = childrenScale;
+
+ // Now we need to do a re-layout, but preserving absolute X and Y coordinates
+ int childCount = getChildCount();
+ float childrenX[] = new float[childCount];
+ float childrenY[] = new float[childCount];
+ for (int i = 0; i < childCount; i++) {
+ final View child = getChildAt(i);
+ childrenX[i] = child.getX();
+ childrenY[i] = child.getY();
+ }
+ onLayout(false, mLeft, mTop, mRight, mBottom);
+ for (int i = 0; i < childCount; i++) {
+ final View child = getChildAt(i);
+ child.setX(childrenX[i]);
+ child.setY(childrenY[i]);
+ }
+ // Also, the page offset has changed (since the pages are now smaller);
+ // update the page offset, but again preserving absolute X and Y coordinates
+ moveToNewPageWithoutMovingCellLayouts(mCurrentPage);
+ }
+
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
if (mFirstLayout && mCurrentPage >= 0 && mCurrentPage < getChildCount()) {
@@ -466,17 +497,21 @@ public abstract class PagedView extends ViewGroup {
for (int i = 0; i < childCount; i++) {
final View child = getChildAt(i);
if (child.getVisibility() != View.GONE) {
- final int childWidth = child.getMeasuredWidth();
+ final int childWidth = getScaledMeasuredWidth(child);
final int childHeight = child.getMeasuredHeight();
int childTop = mPaddingTop;
if (mCenterPagesVertically) {
childTop += ((getMeasuredHeight() - verticalPadding) - childHeight) / 2;
}
+
child.layout(childLeft, childTop,
- childLeft + childWidth, childTop + childHeight);
+ childLeft + child.getMeasuredWidth(), childTop + childHeight);
childLeft += childWidth + mPageSpacing;
}
}
+ if (mFirstLayout && mCurrentPage >= 0 && mCurrentPage < getChildCount()) {
+ mFirstLayout = false;
+ }
}
protected void updateAdjacentPagesAlpha() {
@@ -487,7 +522,7 @@ public abstract class PagedView extends ViewGroup {
final int childCount = getChildCount();
for (int i = 0; i < childCount; ++i) {
View layout = (View) getChildAt(i);
- int childWidth = layout.getMeasuredWidth();
+ int childWidth = getScaledMeasuredWidth(layout);
int halfChildWidth = (childWidth / 2);
int childCenter = getChildOffset(i) + halfChildWidth;
@@ -503,11 +538,11 @@ public abstract class PagedView extends ViewGroup {
int distanceFromScreenCenter = childCenter - screenCenter;
if (distanceFromScreenCenter > 0) {
if (i > 0) {
- d += getChildAt(i - 1).getMeasuredWidth() / 2;
+ d += getScaledMeasuredWidth(getChildAt(i - 1)) / 2;
}
} else {
if (i < childCount - 1) {
- d += getChildAt(i + 1).getMeasuredWidth() / 2;
+ d += getScaledMeasuredWidth(getChildAt(i + 1)) / 2;
}
}
d += mPageSpacing;
@@ -553,7 +588,7 @@ public abstract class PagedView extends ViewGroup {
// page.
final int pageCount = getChildCount();
if (pageCount > 0) {
- final int pageWidth = getChildAt(0).getMeasuredWidth();
+ final int pageWidth = getScaledMeasuredWidth(getChildAt(0));
final int screenWidth = getMeasuredWidth();
int x = getRelativeChildOffset(0) + pageWidth;
int leftScreen = 0;
@@ -563,7 +598,7 @@ public abstract class PagedView extends ViewGroup {
x += pageWidth + mPageSpacing;
// replace above line with this if you don't assume all pages have same width as 0th
// page:
- // x += getChildAt(leftScreen).getMeasuredWidth();
+ // x += getScaledMeasuredWidth(getChildAt(leftScreen));
}
rightScreen = leftScreen;
while (x < mScrollX + screenWidth) {
@@ -572,7 +607,7 @@ public abstract class PagedView extends ViewGroup {
// replace above line with this if you don't assume all pages have same width as 0th
// page:
//if (rightScreen < pageCount) {
- // x += getChildAt(rightScreen).getMeasuredWidth();
+ // x += getScaledMeasuredWidth(getChildAt(rightScreen));
//}
}
rightScreen = Math.min(getChildCount() - 1, rightScreen);
@@ -1049,7 +1084,7 @@ public abstract class PagedView extends ViewGroup {
int right;
for (int i = 0; i < childCount; ++i) {
left = getRelativeChildOffset(i);
- right = (left + getChildAt(i).getMeasuredWidth());
+ right = (left + getScaledMeasuredWidth(getChildAt(i)));
if (left <= relativeOffset && relativeOffset <= right) {
return i;
}
@@ -1067,11 +1102,15 @@ public abstract class PagedView extends ViewGroup {
int offset = getRelativeChildOffset(0);
for (int i = 0; i < index; ++i) {
- offset += getChildAt(i).getMeasuredWidth() + mPageSpacing;
+ offset += getScaledMeasuredWidth(getChildAt(i)) + mPageSpacing;
}
return offset;
}
+ protected int getScaledMeasuredWidth(View child) {
+ return (int) (child.getMeasuredWidth() * mLayoutScale + 0.5f);
+ }
+
int getPageNearestToCenterOfScreen() {
int minDistanceFromScreenCenter = getMeasuredWidth();
int minDistanceFromScreenCenterIndex = -1;
@@ -1079,7 +1118,7 @@ public abstract class PagedView extends ViewGroup {
final int childCount = getChildCount();
for (int i = 0; i < childCount; ++i) {
View layout = (View) getChildAt(i);
- int childWidth = layout.getMeasuredWidth();
+ int childWidth = getScaledMeasuredWidth(layout);
int halfChildWidth = (childWidth / 2);
int childCenter = getChildOffset(i) + halfChildWidth;
int distanceFromScreenCenter = Math.abs(childCenter - screenCenter);