OSDN Git Service

Put a black View in front of SurfaceView.
authorChih-Chung Chang <chihchung@google.com>
Wed, 23 May 2012 04:26:36 +0000 (21:26 -0700)
committerChih-Chung Chang <chihchung@google.com>
Wed, 23 May 2012 04:57:55 +0000 (21:57 -0700)
This prevents SurfaceView from being transparent before the first draw.

Bug: 6507478
Change-Id: I2170f23d4c9844bfc3854d6120f5e72cc0d591ca

res/layout/cropimage.xml
res/layout/dialog_picker.xml
res/layout/gl_root_group.xml [new file with mode: 0644]
res/layout/main.xml
src/com/android/gallery3d/ui/GLRootView.java

index aefebe8..c434fb6 100644 (file)
@@ -17,9 +17,5 @@
 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
         android:layout_width="match_parent"
         android:layout_height="match_parent">
-    <view class="com.android.gallery3d.ui.GLRootView"
-            android:id="@+id/gl_root_view"
-            android:background="@null"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent" />
+    <include layout="@layout/gl_root_group"/>
 </FrameLayout>
index ba3f500..4a625a1 100644 (file)
@@ -18,8 +18,7 @@
         android:orientation="vertical"
         android:layout_width="match_parent"
         android:layout_height="match_parent">
-    <com.android.gallery3d.ui.GLRootView
-            android:id="@+id/gl_root_view"
+    <include layout="@layout/gl_root_group"
             android:layout_weight="1"
             android:layout_height="0dp"
             android:layout_width="match_parent"/>
diff --git a/res/layout/gl_root_group.xml b/res/layout/gl_root_group.xml
new file mode 100644 (file)
index 0000000..76ff33b
--- /dev/null
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2012 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<merge xmlns:android="http://schemas.android.com/apk/res/android">
+    <com.android.gallery3d.ui.GLRootView
+            android:id="@+id/gl_root_view"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"/>
+    <View android:id="@+id/gl_root_cover"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:background="@android:color/black"/>
+</merge>
index 7dfe57a..d367301 100644 (file)
@@ -4,14 +4,7 @@
         android:orientation="vertical"
         android:layout_width="match_parent"
         android:layout_height="match_parent">
-    <com.android.gallery3d.ui.GLRootView
-            android:id="@+id/gl_root_view"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:layout_alignParentBottom="true"
-            android:layout_alignParentLeft="true"
-            android:layout_alignParentRight="true"
-            android:layout_alignParentTop="true"/>
+    <include layout="@layout/gl_root_group"/>
     <FrameLayout android:id="@+id/footer"
             android:visibility="gone"
             android:layout_alignParentBottom="true"
index f78e6e6..99ed8cb 100644 (file)
@@ -25,7 +25,9 @@ import android.os.SystemClock;
 import android.util.AttributeSet;
 import android.view.MotionEvent;
 import android.view.SurfaceHolder;
+import android.view.View;
 
+import com.android.gallery3d.R;
 import com.android.gallery3d.anim.CanvasAnimation;
 import com.android.gallery3d.common.Utils;
 import com.android.gallery3d.util.GalleryUtils;
@@ -104,6 +106,7 @@ public class GLRootView extends GLSurfaceView
 
     private long mLastDrawFinishTime;
     private boolean mInDownState = false;
+    private boolean mFirstDraw = true;
 
     public GLRootView(Context context) {
         this(context, null);
@@ -322,6 +325,20 @@ public class GLRootView extends GLSurfaceView
             mRenderLock.unlock();
         }
 
+        // We put a black cover View in front of the SurfaceView and hide it
+        // after the first draw. This prevents the SurfaceView being transparent
+        // before the first draw.
+        if (mFirstDraw) {
+            mFirstDraw = false;
+            post(new Runnable() {
+                    public void run() {
+                        View root = getRootView();
+                        View cover = root.findViewById(R.id.gl_root_cover);
+                        cover.setVisibility(GONE);
+                    }
+                });
+        }
+
         if (DEBUG_PROFILE_SLOW_ONLY) {
             long t = System.nanoTime();
             long durationInMs = (t - mLastDrawFinishTime) / 1000000;