2011-10-10 29 views
5

OK Ho ricevuto molte domande simili qui su SO e sul Web, senza alcun risultato. Sto solo provando a sovrapporre una vista trasparente su un SurfaceView .. e infine disegnare un rettangolo su di esso, in modo che sembri sovrapporre l'anteprima della fotocamera.Come creare una vista sovrapposizione personalizzata Trasparente su SurfaceView?

non riesco a ottenere la visualizzazione personalizzata di essere trasparenti, blocca-out l'anteprima della fotocamera sottostante. Eventuali suggerimenti?

<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> 

Il 200x200 è solo temporaneo, per dimostrare che sta effettivamente sovrapponendo l'altra vista.

Il FaceOverlayView è solo una visualizzazione personalizzata - che deriva direttamente da View, senza sostituire nulla (per ora).

ottengo un rettangolo nero sulla parte superiore della fotocamera anteprima

+0

usiamo una configurazione molto simile in una delle nostre applicazioni e sembra funzionare bene - provate l'override del metodo 'onDraw' nella visualizzazione personalizzata e fare assolutamente nulla in esso (non chiamare' super') , questo migliora importa qualcosa? – Ertebolle

+0

Grazie per il suggerimento, ma no, ho ancora solo una vista nera in cima. Ho provato a impostare il colore di sfondo trasparente nei costruttori e nella dichiarazione XML. Al momento nella vista derivata non ci sono nient'altro che i costruttori e il onDraw vuoto. – Bobby

+0

Potrebbe sembrare eccessivo, ma forse l'impostazione di un'immagine trasparente come lo sfondo avrebbe funzionato? – MrZander

risposta

2

Beh, this resource file è il layout di acquisizione Barcode Scanner, che ha un "mirino" a strati sopra la parte superiore di una macchina fotografica in anteprima. Utilizzano la propria risorsa @color/transparent, definita come <color name="transparent">#00000000</color>. Forse curiosare con il loro codice e cercare di capire dove tu e loro differiscono.

0

Hai provato l'impostazione sia/sia la SRC o lo sfondo per @null?

Inoltre, se questa strada non funziona, potresti prendere in considerazione l'utilizzo di un percorso per disegnare sulla superficie, il che consentirebbe di modificare dinamicamente la dimensione/posizione del rettangolo in fase di esecuzione.

Questa sarebbe, tuttavia, richiedono la scrittura del codice per un SurfaceView e la manipolazione del OnDraw, che potrebbe essere eccessivo per quello che stai facendo. Essenzialmente significherebbe rendere la tua classe personalizzata qui un'estensione di SurfaceView, piuttosto che qualcosa di stratificato sopra uno.

+0

Hm, proverò l'approccio null - Ho provato a rielaborarlo per usare una singola vista che deriva da SurfaceView - unendo le due in una (sovrascrivendo suDraw nel SurfaceView derivato per disegnare la sovrapposizione, con la stessa tecnica di Paint-rectangle), tuttavia ottengo lo stesso risultato che ci crediate o no. – Bobby

0

ho fatto esattamente la stessa cosa, hanno una vista personalizzata su sovrapposizione anteprima fotocamera. Inizialmente la vista era opaca, quindi l'anteprima della telecamera è stata bloccata. Il problema era che stavo cercando di disegnare un'immagine sulla tela ma ho specificato l'immagine come RGB_565, cambiarla in ARGB_8888 funziona bene. Devi avere il canale alfa e assicurarti che lo sfondo della vista personalizzata sia impostato su trasparente.

0

ho impostato il canale alfa a 0. Esso funziona come un fascino.

Lo faccio dopo aver aggiunto il runtime di visualizzazione personalizzata.

(ImageView) myCustomView.setAlpha(0) 
Problemi correlati