2012-01-25 83 views
5

我有一個SlidingDrawer和一個渲染圖像的自定義SurfaceView。我剛剛嘗試拖動SlidingDrawer,並且發現它已經發現它落在SurfaceView中的圖像後面,並且完全隱藏。在SurfaceView中隱藏圖像的SlidingDrawer

正如你可以想象的那樣,這對用戶來說沒有多大用處,因此當它被拉起時,需要圖像始終落在SlidingDrawer的後面。這可能嗎?

櫃面它有助於這是SlidingDrawer在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> 

這是XML格式的SurfaceView:

<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是定製的,並在的onDraw使用下面的代碼( )方法:

@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); 
} 

回答

5

經過多次掃描後,我從以下Stack Overflow頁面找到了(簡單的)我的問題的答案:Android: SlidingDrawer disappears under SurfaceView。很簡單的SlidingDrawer XML元素添加:

android:background="#00000000"; 

編輯

implimenting它停止工作了背景後已經恢復到了我的原代碼。最後,我發現我遇到的另一個問題是阻止了上述解決方案的工作。對於其他人的好處,確保您不要將SurfaceView z-index設置爲頂部:

sv.setZOrderOnTop(true); 
+0

我說,在我的評論:p很高興你發現它 – Blundell

+0

我也是!謝謝你的幫助。 –

+0

如果你想在上面使用一個佈局:'sv.setZOrderMediaOverlay(true)' –

0

你有沒有試過讓你的超類最後一次畫到最後,在它下面的aw?

@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是有一個按鈕,啓動一個新的活動,那麼你setContentView()之前調用overridependingtransition(int enterAnim, int exitAnim)動畫的活動中,並滑出。

+0

布朗德爾,非常感謝您的答覆。按照您的建議嘗試移動super.onDraw(畫布),但恐怕沒有任何區別。使用活動的另一種方法很不錯。我會在適當的時候進行調查。 –

+0

您的SlidingDrawer和Surface的XML文件在哪裏?即我希望它是''? – Blundell

+0

Blundell,SlidingDrawer和Surface都有不同的佈局。 SlidingDrawer位於主活動的佈局中,而Surface位於主活動佈局中片段使用的佈局中。我正在使用片段。 –

0

即使我面臨類似的問題。但我找到了解決方法。
只要做slideHandleButton.setText(「」);當抽屜關閉時。這將使按鈕出現:)