summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/java/android/view/SurfaceView.java24
1 files changed, 18 insertions, 6 deletions
diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java
index 8a95664..988ccef 100644
--- a/core/java/android/view/SurfaceView.java
+++ b/core/java/android/view/SurfaceView.java
@@ -163,7 +163,18 @@ public class SurfaceView extends View {
boolean mUpdateWindowNeeded;
boolean mReportDrawNeeded;
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) {
super(context);
init();
@@ -201,7 +212,9 @@ public class SurfaceView extends View {
mLayout.token = getWindowToken();
mLayout.setTitle("SurfaceView");
mViewVisibility = getVisibility() == VISIBLE;
- getViewTreeObserver().addOnScrollChangedListener(mScrollChangedListener);
+ ViewTreeObserver observer = getViewTreeObserver();
+ observer.addOnScrollChangedListener(mScrollChangedListener);
+ observer.addOnPreDrawListener(mDrawListener);
}
@Override
@@ -262,7 +275,9 @@ public class SurfaceView extends View {
@Override
protected void onDetachedFromWindow() {
- getViewTreeObserver().removeOnScrollChangedListener(mScrollChangedListener);
+ ViewTreeObserver observer = getViewTreeObserver();
+ observer.removeOnScrollChangedListener(mScrollChangedListener);
+ observer.removeOnPreDrawListener(mDrawListener);
mRequestedVisible = false;
updateWindow(false, false);
mHaveFrame = false;
@@ -346,9 +361,6 @@ public class SurfaceView extends View {
canvas.drawColor(0, PorterDuff.Mode.CLEAR);
}
}
- // reposition ourselves where the surface is
- mHaveFrame = true;
- updateWindow(false, false);
super.dispatchDraw(canvas);
}