2011-01-07 29 views
10

Sto provando a creare uno SlidingDrawer con contenuto LinearLayout su FrameLayout.Android: SlidingDrawer scompare in SurfaceView

All'inizio sembra tutto a posto, prendo la maniglia del mio SlidingDrawer nella parte inferiore dello schermo. Ma poi, se inizio a trascinare la maniglia e il contenuto inizia a mostrare, viene ritagliato dal rettangolo del bordo dell'impugnatura. Se trascino la maniglia fino all'intero contenuto, alla fine viene visualizzato, tuttavia se ora trascino la maniglia verso il basso, verrà ritagliata dal rettangolo del bordo del contenuto. Inoltre, se la maniglia è completamente sollevata, non appena inizio a trascinarla, l'intero contenuto scompare.
Posso ancora fare clic su dove dovrebbe essere visualizzata la maniglia sullo schermo, trascinarla e il contenuto verrà visualizzato, ma devo indovinare dove si trova l'handle.

Ciò che sembra causare questo è il fatto che ho un SurfaceView nel file xml appena prima di SlidingDrawer.
Rimuovere la vista dall'xml risolve questo problema, tuttavia ho bisogno di questa vista.

Ecco il 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); 
    } 
} 

Edit: Ho appena notato che se DrawView estende Vista e non SurfaceView questo problema va via. Tuttavia, sto utilizzando un thread di disegno dedicato e, in base alla documentazione (e all'esempio di LunarLander) quando si utilizza un thread di disegno dedicato, è necessario disegnare su SurfaceView.

Qualsiasi aiuto sarebbe molto apprezzato!

risposta

14

android: background = "# 00000000"

sfondo colore era il problema.

+0

Cheers, ha funzionato! – ykrasik

+0

Alcuni chiarimenti: imposta questo attributo xml sull'elemento SlidingDrawer. – SilithCrowe

+1

Non penso che questo risolva il problema. La regione in cui il cassetto * sarebbe stato *, diventa oscurata e 'SurfaceView' non è visibile in quella regione anche quando il cassetto è chiuso. Sto ancora avendo il problema in cui lo sfondo è troncato dalla posizione che la maniglia avrebbe occupato se il cassetto fosse aperto. –

3

SurfaceView funziona tagliando un "buco" attraverso la finestra per visualizzare un'altra superficie (quella che si disegna). Questo è ciò che sta causando il ritaglio del cassetto di SlidingDrawer. Mi dispiace dire che non sarai in grado di utilizzare entrambe le viste insieme.

+0

Grazie per la risposta! Peccato però ... – ykrasik

+2

Ho notato che in pratica hanno questa funzione nell'app HTC std camera. Questo significa che stanno facendo il rendering di SlidingDrawer direttamente in SurfaceView o stanno facendo tutto manualmente con OpenGL? – Weston

+1

L'aggiunta del colore di sfondo ha funzionato su tutti i dispositivi che ho provato. Prima funzionava con alcuni dispositivi e non con altri. – Louth

Problemi correlati