From e2af5c882b146c3a8c7a37f093d13c8b386e8eba Mon Sep 17 00:00:00 2001 From: Dianne Hackborn Date: Thu, 18 Mar 2010 15:44:34 -0700 Subject: [PATCH] Fix issue #2438457: Resolving Flash artifacts while scrolling. When the surface view scrolls off the screen it stops drawing, so we stop moving it. Add an observer to scrolls so we can continue to update its position. Change-Id: I2604cbbecd3e72be1a2a6bc5794e3e1c19317b9e --- api/current.xml | 2 +- core/java/android/view/SurfaceView.java | 15 +++++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/api/current.xml b/api/current.xml index 2d3783ad1a6ac..d3e673e237e50 100644 --- a/api/current.xml +++ b/api/current.xml @@ -121984,7 +121984,7 @@ deprecated="not deprecated" visibility="public" > - + diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java index d8010bcce547c..53c238c4c5090 100644 --- a/core/java/android/view/SurfaceView.java +++ b/core/java/android/view/SurfaceView.java @@ -124,6 +124,13 @@ public class SurfaceView extends View { } }; + final ViewTreeObserver.OnScrollChangedListener mScrollChangedListener + = new ViewTreeObserver.OnScrollChangedListener() { + public void onScrollChanged() { + updateWindow(false); + } + }; + boolean mRequestedVisible = false; boolean mWindowVisibility = false; boolean mViewVisibility = false; @@ -180,6 +187,7 @@ public class SurfaceView extends View { mLayout.token = getWindowToken(); mLayout.setTitle("SurfaceView"); mViewVisibility = getVisibility() == VISIBLE; + getViewTreeObserver().addOnScrollChangedListener(mScrollChangedListener); } @Override @@ -200,6 +208,7 @@ public class SurfaceView extends View { @Override protected void onDetachedFromWindow() { + getViewTreeObserver().removeOnScrollChangedListener(mScrollChangedListener); mRequestedVisible = false; updateWindow(false); mHaveFrame = false; @@ -223,12 +232,6 @@ public class SurfaceView extends View { setMeasuredDimension(width, height); } - @Override - protected void onScrollChanged(int l, int t, int oldl, int oldt) { - super.onScrollChanged(l, t, oldl, oldt); - updateWindow(false); - } - @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh);