summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher2/PagedViewCellLayout.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/launcher2/PagedViewCellLayout.java')
-rw-r--r--src/com/android/launcher2/PagedViewCellLayout.java96
1 files changed, 94 insertions, 2 deletions
diff --git a/src/com/android/launcher2/PagedViewCellLayout.java b/src/com/android/launcher2/PagedViewCellLayout.java
index 6c9ff6dbe..16df2a499 100644
--- a/src/com/android/launcher2/PagedViewCellLayout.java
+++ b/src/com/android/launcher2/PagedViewCellLayout.java
@@ -55,6 +55,8 @@ public class PagedViewCellLayout extends ViewGroup {
private final Rect mLayoutRect = new Rect();
private final Rect mDimmedBitmapRect = new Rect();
+ private boolean mCenterContent;
+
private int mCellCountX;
private int mCellCountY;
private int mCellWidth;
@@ -236,13 +238,28 @@ public class PagedViewCellLayout extends ViewGroup {
protected void onLayout(boolean changed, int l, int t, int r, int b) {
int count = getChildCount();
+ int offsetX = 0;
+ if (mCenterContent) {
+ // determine the max width of all the rows and center accordingly
+ int maxRowWidth = 0;
+ for (int i = 0; i < count; i++) {
+ View child = getChildAt(i);
+ if (child.getVisibility() != GONE) {
+ PagedViewCellLayout.LayoutParams lp =
+ (PagedViewCellLayout.LayoutParams) child.getLayoutParams();
+ maxRowWidth = Math.max(maxRowWidth, lp.x + lp.width);
+ }
+ }
+ offsetX = (getMeasuredWidth() / 2) - (maxRowWidth / 2);
+ }
+
for (int i = 0; i < count; i++) {
View child = getChildAt(i);
if (child.getVisibility() != GONE) {
PagedViewCellLayout.LayoutParams lp =
(PagedViewCellLayout.LayoutParams) child.getLayoutParams();
- int childLeft = lp.x;
+ int childLeft = offsetX + lp.x;
int childTop = lp.y;
child.layout(childLeft, childTop, childLeft + lp.width, childTop + lp.height);
}
@@ -261,6 +278,10 @@ public class PagedViewCellLayout extends ViewGroup {
return super.onTouchEvent(event) || true;
}
+ public void enableCenteredContent(boolean enabled) {
+ mCenterContent = enabled;
+ }
+
@Override
protected void setChildrenDrawingCacheEnabled(boolean enabled) {
final int count = getChildCount();
@@ -327,12 +348,32 @@ public class PagedViewCellLayout extends ViewGroup {
}
}
+ public void clearDimmedBitmap() {
+ setDimmedBitmapAlpha(0.0f);
+ if (mDimmedBitmap != null) {
+ mDimmedBitmap.recycle();
+ mDimmedBitmap = null;
+ }
+ }
+
private void setChildrenAlpha(float alpha) {
for (int i = 0; i < getChildCount(); i++) {
getChildAt(i).setAlpha(alpha);
}
}
+ public int[] getCellCountForDimensions(int width, int height) {
+ // Always assume we're working with the smallest span to make sure we
+ // reserve enough space in both orientations
+ int smallerSize = Math.min(mCellWidth, mCellHeight);
+
+ // Always round up to next largest cell
+ int spanX = (width + smallerSize) / smallerSize;
+ int spanY = (height + smallerSize) / smallerSize;
+
+ return new int[] { spanX, spanY };
+ }
+
/**
* Start dragging the specified child
*
@@ -343,6 +384,39 @@ public class PagedViewCellLayout extends ViewGroup {
lp.isDragging = true;
}
+ public int estimateCellHSpan(int width) {
+ return (width + mCellWidth) / mCellWidth;
+ }
+ public int estimateCellVSpan(int height) {
+ return (height + mCellHeight) / mCellHeight;
+ }
+ public int[] estimateCellDimensions(int approxWidth, int approxHeight,
+ int cellHSpan, int cellVSpan) {
+ // NOTE: we are disabling this until we find a good way to approximate this without fully
+ // measuring
+ /*
+ // we may want to use this before any measuring/layout happens, so we pass in an approximate
+ // size for the layout
+ int numWidthGaps = mCellCountX - 1;
+ int numHeightGaps = mCellCountY - 1;
+ int hSpaceLeft = approxWidth - mPaddingLeft
+ - mPaddingRight - (mCellWidth * mCellCountX);
+ int vSpaceLeft = approxHeight - mPaddingTop
+ - mPaddingBottom - (mCellHeight * mCellCountY);
+ int widthGap = hSpaceLeft / numWidthGaps;
+ int heightGap = vSpaceLeft / numHeightGaps;
+ int minGap = Math.min(widthGap, heightGap);
+ return new int[] {
+ (cellHSpan * mCellWidth) + ((cellHSpan - 1) * minGap),
+ (cellVSpan * mCellHeight) + ((cellVSpan - 1) * minGap)
+ };
+ */
+ return new int[] {
+ (cellHSpan * mCellWidth),
+ (cellVSpan * mCellHeight)
+ };
+ }
+
@Override
public ViewGroup.LayoutParams generateLayoutParams(AttributeSet attrs) {
return new PagedViewCellLayout.LayoutParams(getContext(), attrs);
@@ -388,6 +462,9 @@ public class PagedViewCellLayout extends ViewGroup {
*/
public boolean isDragging;
+ // a data object that you can bind to this layout params
+ private Object mTag;
+
// X coordinate of the view in the layout.
@ViewDebug.ExportedProperty
int x;
@@ -395,6 +472,12 @@ public class PagedViewCellLayout extends ViewGroup {
@ViewDebug.ExportedProperty
int y;
+ public LayoutParams() {
+ super(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
+ cellHSpan = 1;
+ cellVSpan = 1;
+ }
+
public LayoutParams(Context c, AttributeSet attrs) {
super(c, attrs);
cellHSpan = 1;
@@ -440,8 +523,17 @@ public class PagedViewCellLayout extends ViewGroup {
y = vStartPadding + myCellY * (cellHeight + heightGap) + topMargin;
}
+ public Object getTag() {
+ return mTag;
+ }
+
+ public void setTag(Object tag) {
+ mTag = tag;
+ }
+
public String toString() {
- return "(" + this.cellX + ", " + this.cellY + ")";
+ return "(" + this.cellX + ", " + this.cellY + ", " +
+ this.cellHSpan + ", " + this.cellVSpan + ")";
}
}
}