2011-10-10 11 views
5

OK Przejrzałem wiele podobnych pytań tutaj na SO i w Internecie, bez skutku. Po prostu próbuję nakładać przezroczysty widok na SurfaceView ... i ostatecznie narysować na nim prostokąt, który wydaje się nakładać podgląd kamery.Jak zrobić niestandardową nakładkę Wyświetl przezroczystość na SurfaceView?

Nie mogę uzyskać niestandardowego widoku, który jest przezroczysty, blokuje podgląd podświetlenia kamery. Jakieś sugestie?

<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 jest tylko tymczasowy, aby udowodnić, że rzeczywiście nakłada się na inny widok.

FaceOverlayView jest po prostu niestandardowym widokiem - pochodzącym bezpośrednio z widoku, bez nadpisywania czegokolwiek (na razie).

I pojawia się czarny prostokąt na górze podglądu kamery

+0

Używamy bardzo podobną konfigurację w jednej z naszych aplikacji i wydaje się działać OK - spróbuj przesłanianie 'metody onDraw' w widoku niestandardowego i robi absolutnie nic w nim (nie nazywają' super') Czy to się poprawi? – Ertebolle

+0

Dzięki za sugestię, ale nie, wciąż mam czarny widok na wierzchu. Próbowałem ustawić kolor tła na przezroczysty w konstruktorach, a także deklarację XML. Teraz w widoku pochodnym nie ma nic oprócz konstruktorów i pustego obiektu onDraw. – Bobby

+0

To może wydawać się przesadą, ale może ustawienie przezroczystego obrazu w tle zadziała? – MrZander

Odpowiedz

2

Well, this resource file jest przechwytywanie kodów kreskowych układ, który ma „wizjer” warstwowy na szczycie podglądu kamery. Korzystają z własnego zasobu @color/transparent, zdefiniowanego jako <color name="transparent">#00000000</color>. Być może zajmij się ich kodem i spróbuj dowiedzieć się, gdzie ty i oni się różnią.

0

Czy próbowałeś ustawić oba/albo src, albo tło do @null?

Ponadto, jeśli ta ścieżka nie działa, można rozważyć użycie ścieżki do narysowania na powierzchni, która umożliwi dynamiczną zmianę rozmiaru/położenia prostokąta w czasie wykonywania.

Wymagałoby to jednak napisania jakiegoś kodu dla SurfaceView i obsługi onDraw, co może być przesadą dla tego, co robisz. Zasadniczo oznaczałoby to, że twoja niestandardowa klasa jest tutaj rozszerzeniem SurfaceView, a nie czymś warstwowym na wierzchu.

+0

Hm, spróbuję podejścia zerowego - próbowałem przerobienia tego, aby użyć pojedynczego widoku, który pochodzi od SurfaceView - łącząc dwa w jeden (nadpisując onDraw w wyprowadzonym SurfaceView, aby narysować nakładkę, z tą samą techniką Paint-rectangle), jednak dostaję taki sam wynik, uwierz lub nie. – Bobby

0

Robiłem dokładnie to samo, mam dostosowaną nakładkę widoku na podglądzie kamery. Początkowo widok był nieprzejrzysty, więc podgląd kamery został zablokowany. Problem polegał na tym, że próbowałem narysować obraz na płótnie, ale podałem obraz jako RGB_565, zmieniłem go na ARGB_8888 działa dobrze. Musisz mieć kanał alfa i upewnić się, że tło niestandardowego widoku jest ustawione jako przezroczyste.

0

Ustawiam kanał alfa na 0. Działa jak urok.

Robię to po dodaniu niestandardowego środowiska wykonawczego widoku.

(ImageView) myCustomView.setAlpha(0) 
Powiązane problemy