Merge "Make sure that we update SurfaceView's window with display lists. Bug #3395487" into honeycomb

This commit is contained in:
Romain Guy
2011-01-26 18:29:38 -08:00
committed by Android (Google) Code Review

View File

@@ -163,7 +163,18 @@ public class SurfaceView extends View {
boolean mUpdateWindowNeeded; boolean mUpdateWindowNeeded;
boolean mReportDrawNeeded; boolean mReportDrawNeeded;
private Translator mTranslator; private Translator mTranslator;
private final ViewTreeObserver.OnPreDrawListener mDrawListener =
new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
// reposition ourselves where the surface is
mHaveFrame = true;
updateWindow(false, false);
return true;
}
};
public SurfaceView(Context context) { public SurfaceView(Context context) {
super(context); super(context);
init(); init();
@@ -201,7 +212,9 @@ public class SurfaceView extends View {
mLayout.token = getWindowToken(); mLayout.token = getWindowToken();
mLayout.setTitle("SurfaceView"); mLayout.setTitle("SurfaceView");
mViewVisibility = getVisibility() == VISIBLE; mViewVisibility = getVisibility() == VISIBLE;
getViewTreeObserver().addOnScrollChangedListener(mScrollChangedListener); ViewTreeObserver observer = getViewTreeObserver();
observer.addOnScrollChangedListener(mScrollChangedListener);
observer.addOnPreDrawListener(mDrawListener);
} }
@Override @Override
@@ -262,7 +275,9 @@ public class SurfaceView extends View {
@Override @Override
protected void onDetachedFromWindow() { protected void onDetachedFromWindow() {
getViewTreeObserver().removeOnScrollChangedListener(mScrollChangedListener); ViewTreeObserver observer = getViewTreeObserver();
observer.removeOnScrollChangedListener(mScrollChangedListener);
observer.removeOnPreDrawListener(mDrawListener);
mRequestedVisible = false; mRequestedVisible = false;
updateWindow(false, false); updateWindow(false, false);
mHaveFrame = false; mHaveFrame = false;
@@ -346,9 +361,6 @@ public class SurfaceView extends View {
canvas.drawColor(0, PorterDuff.Mode.CLEAR); canvas.drawColor(0, PorterDuff.Mode.CLEAR);
} }
} }
// reposition ourselves where the surface is
mHaveFrame = true;
updateWindow(false, false);
super.dispatchDraw(canvas); super.dispatchDraw(canvas);
} }