Adding holographic outline for paged items (sans widgets).

Fixing possible null ptr exception in Launcher.

Change-Id: Ie625a6503299cf122e5c22852846d59e66f77414
This commit is contained in:
Winson Chung
2010-08-19 14:51:28 -07:00
parent 5a74c07c1c
commit b3347bb9f4
12 changed files with 275 additions and 216 deletions
+9 -67
View File
@@ -88,7 +88,6 @@ public abstract class PagedView extends ViewGroup {
private ScreenSwitchListener mScreenSwitchListener;
private boolean mDimmedPagesDirty;
private final Handler mHandler = new Handler();
public interface ScreenSwitchListener {
void onScreenSwitch(View newScreen, int newScreenIndex);
@@ -262,18 +261,18 @@ public abstract class PagedView extends ViewGroup {
int halfChildWidth = (childWidth / 2);
int childCenter = getChildOffset(i) + halfChildWidth;
int distanceFromScreenCenter = Math.abs(childCenter - screenCenter);
float dimAlpha = 0.0f;
float alpha = 0.0f;
if (distanceFromScreenCenter < halfChildWidth) {
dimAlpha = 0.0f;
alpha = 1.0f;
} else if (distanceFromScreenCenter > childWidth) {
dimAlpha = 1.0f;
alpha = 0.0f;
} else {
dimAlpha = (float) (distanceFromScreenCenter - halfChildWidth) / halfChildWidth;
dimAlpha = (dimAlpha * dimAlpha);
float dimAlpha = (float) (distanceFromScreenCenter - halfChildWidth) / halfChildWidth;
dimAlpha = Math.max(0.0f, Math.min(1.0f, (dimAlpha * dimAlpha)));
alpha = 1.0f - dimAlpha;
}
dimAlpha = Math.max(0.0f, Math.min(1.0f, dimAlpha));
if (Float.compare(dimAlpha, layout.getDimmedBitmapAlpha()) != 0)
layout.setDimmedBitmapAlpha(dimAlpha);
if (Float.compare(alpha, layout.getAlpha()) != 0)
layout.setAlpha(alpha);
}
}
super.dispatchDraw(canvas);
@@ -802,78 +801,21 @@ public abstract class PagedView extends ViewGroup {
};
}
private void clearDimmedBitmaps(boolean skipCurrentScreens) {
final int count = getChildCount();
if (mCurrentScreen < count) {
if (skipCurrentScreens) {
int lowerScreenBound = Math.max(0, mCurrentScreen - 1);
int upperScreenBound = Math.min(mCurrentScreen + 1, count - 1);
for (int i = 0; i < count; ++i) {
if (i < lowerScreenBound || i > upperScreenBound) {
PagedViewCellLayout layout = (PagedViewCellLayout) getChildAt(i);
layout.clearDimmedBitmap();
}
}
} else {
for (int i = 0; i < count; ++i) {
PagedViewCellLayout layout = (PagedViewCellLayout) getChildAt(i);
layout.clearDimmedBitmap();
}
}
}
}
Runnable clearLayoutOtherDimmedBitmapsRunnable = new Runnable() {
@Override
public void run() {
if (mScroller.isFinished()) {
clearDimmedBitmaps(true);
mHandler.removeMessages(0);
} else {
mHandler.postDelayed(clearLayoutOtherDimmedBitmapsRunnable, 50);
}
}
};
Runnable clearLayoutDimmedBitmapsRunnable = new Runnable() {
@Override
public void run() {
if (mScroller.isFinished()) {
clearDimmedBitmaps(false);
mHandler.removeMessages(0);
} else {
mHandler.postDelayed(clearLayoutOtherDimmedBitmapsRunnable, 50);
}
}
};
// called when this paged view is no longer visible
public void cleanup() {
// clear all the layout dimmed bitmaps
mHandler.removeMessages(0);
mHandler.postDelayed(clearLayoutDimmedBitmapsRunnable, 500);
}
public void loadAssociatedPages(int screen) {
final int count = getChildCount();
if (screen < count) {
int lowerScreenBound = Math.max(0, screen - 1);
int upperScreenBound = Math.min(screen + 1, count - 1);
boolean hasDimmedBitmap = false;
for (int i = 0; i < count; ++i) {
if (lowerScreenBound <= i && i <= upperScreenBound) {
syncPageItems(i);
} else {
PagedViewCellLayout layout = (PagedViewCellLayout) getChildAt(i);
final PagedViewCellLayout layout = (PagedViewCellLayout) getChildAt(i);
if (layout.getChildCount() > 0) {
layout.removeAllViews();
}
hasDimmedBitmap |= layout.getDimmedBitmapAlpha() > 0.0f;
}
}
if (hasDimmedBitmap) {
mHandler.removeMessages(0);
mHandler.postDelayed(clearLayoutOtherDimmedBitmapsRunnable, 500);
}
}
}