2012-01-25 6 views
5

Mam zarówno SlidingDrawer i niestandardowy SurfaceView, który renderuje obraz. Właśnie próbowałem przeciągnąć SlidingDrawer do góry iw ten sposób odkryłem, że idzie za zdjęcie w SurfaceView i jest całkowicie ukryte.SlidingDrawer ukryte przez obraz w SurfaceView

Jak można sobie wyobrazić, nie będzie to zbytnio użyteczne dla użytkownika, a zatem konieczne jest, aby obraz zawsze znajdował się za SlidingDrawer, gdy jest on podciągnięty. czy to możliwe?

Okrywać pomaga to SlidingDrawer w xml:

<SlidingDrawer 
      android:id="@+id/drawer" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:handle="@+id/handle" 
      android:content="@+id/content" 
      android:layout_alignParentBottom="true"> 

      <TextView 
       android:id="@id/handle" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:gravity="center" 
       android:paddingTop="5dip" 
       android:paddingBottom="5dip" 
       android:textStyle="bold" 
       android:text="text"/> 


      <include layout="@layout/content" 
       android:id="@id/content" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent"/> 

     </SlidingDrawer> 

I to jest SurfaceView w xml:

<FrameLayout android:id="@+id/FrameLayout01" 
     android:layout_width="fill_parent" android:layout_height="fill_parent"> 
     <com.android.imagemagic.widgets.ImageManipulationSurfaceView 
     android:id="@+id/surfaceArea" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" android:layout_gravity="center"/> 
    </FrameLayout> 

SurfaceView jest zwyczaj i wykorzystuje następujący kod w OnDraw () metoda:

@Override 
public void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 

    //Clear canvas 
    Paint paint = new Paint(); 
    paint.setXfermode(new PorterDuffXfermode(Mode.CLEAR)); 
    canvas.drawPaint(paint); 
    paint.setXfermode(new PorterDuffXfermode(Mode.SRC)); 

    // Draw image 
    canvas.drawBitmap(image, imageX, imageY, null); 
} 

Odpowiedz

5

Po długim skanowaniu znalazłem (prostą) odpowiedź na mój problem z następującej strony przepełnienia stosu: Android: SlidingDrawer disappears under SurfaceView. Po prostu w elemencie xml SlidingDrawer dodać:

android:background="#00000000"; 

Edit

Po powróciła do mojego oryginalnego kodu po implimenting tło przestał działać ponownie. W końcu odkryłem, że drugim problemem, który miałem, było zatrzymanie powyższego rozwiązania. Z korzyścią dla innych, upewnij się, że nie ustawiłeś zindeksu SurfaceView na górze:

sv.setZOrderOnTop(true); 
+0

Powiedziałem, że w moim komentarzu: p cieszę się, że znalazłeś to – Blundell

+0

Ja też! Dzięki za pomoc. –

+0

Jeśli chcesz narysować układ na najwyższym poziomie: 'sv.setZOrderMediaOverlay (true)' –

0

Czy próbowałeś/aś pozwolić sobie na ostatnie losowanie super klasy? a poniżej?

@Override 
public void onDraw(Canvas canvas) { 
    //Clear canvas 
    Paint paint = new Paint(); 
    paint.setXfermode(new PorterDuffXfermode(Mode.CLEAR)); 
    canvas.drawPaint(paint); 
    paint.setXfermode(new PorterDuffXfermode(Mode.SRC)); 

    // Draw image 
    canvas.drawBitmap(image, imageX, imageY, null); 

    super.onDraw(canvas); 
} 

alernative do korzystania z remisu przesuwnych jest mieć przycisk, który rozpocznie się nowa aktywność, a następnie zadzwonić overridependingtransition(int enterAnim, int exitAnim) przed setContentView() animowanie aktywności do wsuwać i wysuwać.

+0

Blundell, wielkie dzięki za odpowiedź. Próbowałem przenosić super.onDraw (płótno), jak sugerujesz i nie sprawiło to żadnej różnicy, obawiam się. Alternatywa korzystania z działalności jest miła. Zbadam to we właściwym czasie. –

+0

Gdzie jest twój plik XML SlidingDrawer i Surface? tj. mam nadzieję, że jest, "'? – Blundell

+0

Blundell, SlidingDrawer i Surface są w różnych układach. SlidingDrawer znajduje się w układzie głównej aktywności, natomiast Surface jest w układzie używanym przez fragment znajdujący się w głównym układzie działań. Używam fragmentów. –

0

Nawet ja stanąłem w obliczu podobnego problemu. Ale znalazłem obejście tego.
Po prostu wykonaj polecenie slideHandleButton.setText (""); kiedy szuflada jest zamknięta. Spowoduje to pojawienie się przycisku :)