2011-01-07 26 views
10

Estoy intentando crear un SlidingDrawer con contenido LinearLayout en un FrameLayout.Android: SlidingDrawer desaparece de SurfaceView

Al principio todo parece estar bien, obtengo el mango de mi deslizador deslizable en la parte inferior de la pantalla. Pero luego, si empiezo a arrastrar el controlador hacia arriba y el contenido comienza a mostrarse, queda recortado por el rectángulo de borde del controlador. Si arrastro el controlador hasta el final, finalmente se muestra todo el contenido; sin embargo, si ahora arrastro el controlador hacia abajo, quedará recortado por el borde del rectángulo del contenido. Además, si el asa está completamente hacia arriba, tan pronto como empiezo a arrastrarlo, todo el contenido desaparece.
Todavía puedo hacer clic en el lugar donde debería estar el identificador en la pantalla, arrástrelo y se mostrará el contenido, pero debo adivinar dónde está el identificador.

Lo que parece estar causando esto es el hecho de que tengo SurfaceView en el archivo xml justo antes de SlidingDrawer.
Eliminar la vista del xml resuelve este problema, sin embargo, necesito esta vista.

Aquí está el xml:

<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <!-- Removing this DrawView from here solves the problem --> 
    <com.package.DrawView 
     android:id="@+id/main" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
    /> 

    <SlidingDrawer 
     android:id="@+id/SlidingDrawer" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:allowSingleTap="true" 
     android:animateOnClick="true" 
     android:handle="@+id/slideHandleButton" 
     android:content="@+id/contentLayout" 
     android:padding="10dip"> 

     <Button 
      android:id="@+id/slideHandleButton" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:background="@drawable/sliding_button"> 
     </Button> 

     <LinearLayout 
      android:id="@+id/contentLayout" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:orientation="vertical"> 

      <Button 
       android:id="@+id/clearButton" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="Test"> 
      </Button> 

     </LinearLayout> 

    </SlidingDrawer> 

</FrameLayout> 

Java:

package com.package; 

import android.app.Activity; 
import android.os.Bundle; 

public class SlideTest extends Activity 
{ 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.main); 
    } 
} 

package com.package; 

import android.content.Context; 
import android.util.AttributeSet; 
import android.view.SurfaceView; 

public class DrawView extends SurfaceView 
{ 
    public DrawView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 
} 

Editar: Acabo de notar que si se extiende DrawView Vista y no SurfaceView este problema desaparece. Sin embargo, estoy usando un hilo de dibujo dedicado y de acuerdo con la documentación (y el ejemplo de LunarLander) cuando uso un hilo de dibujo dedicado, debe dibujar en un SurfaceView.

¡Cualquier ayuda sería muy apreciada!

Respuesta

14

androide: Fondo = "# 00000000"

Color del fondo era el problema.

+0

¡Saludos, eso funcionó! – ykrasik

+0

Algunas aclaraciones: Establezca este atributo xml en el elemento SlidingDrawer. – SilithCrowe

+1

No creo que esto realmente resuelva el problema. La región donde el cajón * hubiera estado *, se oscurecerá y el 'SurfaceView' no será visible en esa región, incluso cuando el cajón esté cerrado. Todavía tengo el problema de que el fondo esté recortado por la ubicación que ocuparía el mango si el cajón estuviera abierto. –

3

SurfaceView corta un "agujero" a través de la ventana para mostrar otra superficie (la que dibuja). Esto es lo que está causando que se recorte el cajón del SlidingDrawer. Lamento decir que no podrás usar ambas vistas juntas.

+0

Gracias por su respuesta! Sin embargo, lástima ... – ykrasik

+2

Me di cuenta de que básicamente tienen esta característica en la aplicación de la cámara estándar HTC. ¿Esto significa que están haciendo la representación de SlidingDrawer directamente en SurfaceView o lo están haciendo todo manualmente con OpenGL? – Weston

+1

Al agregar el color de fondo funcionó en todos los dispositivos que probé. Antes de eso, funcionaba con algunos dispositivos y no con otros. – Louth

Cuestiones relacionadas