2011-10-10 105 views
5

好吧我已經在SO和網絡上經歷了很多類似的問題,但都無濟於事。 我只是試圖覆蓋一個SurfaceView上的透明視圖..並最終在其上繪製一個矩形,使它看起來覆蓋了相機預覽。如何使自定義疊加視圖在SurfaceView頂部透明?

我不能讓自定義視圖是透明的,它會阻止時的基礎攝像頭預覽。有什麼建議麼?

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
    <FrameLayout 
     android:layout_alignParentTop="true" 
     android:layout_width="fill_parent" 
     android:layout_height="400dip"> 
     <SurfaceView 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:id="@+id/drawSurface" /> 
     <com.bobby.facecapture.FaceOverlayView 
      android:id="@+id/drawOverlay" 
      android:background="@android:color/transparent" 
      android:layout_width="200dip"  
      android:layout_height="200dip"  
     /> 
    </FrameLayout> 
</RelativeLayout> 

200x200只是暫時的,證明它確實覆蓋了另一種觀點。

的FaceOverlayView僅僅是一個自定義視圖 - 直接從View派生,而無需重寫任何東西(現在)。

我得到一個黑色的長方形相機預覽

+0

我們在應用程序之一,使用非常類似的設置,它似乎工作確定 - 嘗試重寫您的自定義視圖中的'onDraw'方法和做絕對沒有在它(不叫'super') ,這是否改善了事情? – Ertebolle

+0

感謝您的建議,但不,我仍然只是看到頂部的黑色視圖。我已經嘗試在構造函數中將背景顏色設置爲透明以及XML聲明。現在,在派生視圖中,除了構造函數和空的onDraw以外沒有其他任何東西。 – Bobby

+0

這看起來似乎過度殺傷了,但也許設置一個透明的圖片作爲背景將工作? – MrZander

回答

2

井頂部,this resource file是條碼掃描儀捕獲的佈局,其中有一個「取景器」鋪在相機預覽的頂部。他們使用自己的@color/transparent資源,定義爲<color name="transparent">#00000000</color>。也許用他們的代碼捅一下,試圖弄清楚你和他們的區別。

0

你有沒有試過將src或背景設置爲@null?

而且,如果這條大道不奏效,你可以考慮使用路徑來繪製在表面上,這樣可以讓你在運行時動態改變矩形的大小/位置。

那會,但是,需要編寫一個SurfaceView一些代碼和處理的onDraw,這可能是矯枉過正,你在做什麼。從本質上講,這意味着將您的自定義類放在這裏作爲SurfaceView的擴展,而不是某個層的頂層。

+0

嗯,我會嘗試空方法 - 我已經嘗試重做這個使用從SurfaceView派生的單個視圖 - 將二者合併爲一個(在導出的SurfaceView中重寫onDraw以繪製覆蓋圖,使用相同的Paint-rectangle技術),但是我得到相同的結果相信與否。 – Bobby

0

我一直在做同樣的事情,在Camera preview上有一個自定義的視圖覆蓋。最初該視圖是不透明的,因此相機預覽被阻止。問題是我試圖在畫布上繪製圖像,但將圖像指定爲RGB_565,將其更改爲ARGB_8888可以正常工作。您必須擁有Alpha通道,並確保自定義視圖的背景設置爲透明。

0

我將alpha通道設置爲0.它的工作原理類似於魅力。

我在添加自定義視圖運行時後執行此操作。

(ImageView) myCustomView.setAlpha(0) 
相關問題