2011-10-10 15 views
5

OK He pasado por muchas preguntas similares aquí en SO y en la web, fue en vano. Solo intento superponer una vista transparente sobre un SurfaceView ... y finalmente dibujar un rectángulo sobre él, de modo que parece superponerse a la vista previa de la cámara.¿Cómo hacer una vista de superposición personalizada transparente en la parte superior de un SurfaceView?

No puedo conseguir que la vista personalizada sea transparente, bloquea la vista previa de la cámara subyacente. ¿Alguna sugerencia?

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

El 200x200 es solo temporal, para demostrar que de hecho está superpuesto a la otra vista.

FaceOverlayView es solo una vista personalizada, derivada directamente de View, sin anular nada (por ahora).

me sale un rectángulo negro en la parte superior de la cámara de vista previa

+0

se utiliza una configuración muy similar en una de nuestras aplicaciones y parece que funciona bien - intente anular el método 'onDraw' en la vista personalizada y sin hacer absolutamente nada en él (no se llaman' super') , ¿eso mejora las cosas? – Ertebolle

+0

Gracias por la sugerencia, pero no, todavía tengo una vista negra en la parte superior. He intentado configurar el color de fondo para que sea transparente en los constructores y en la declaración XML. En este momento, en la vista derivada no hay nada más que los constructores y el onDraw vacío. – Bobby

+0

Puede parecer exagerado, pero ¿tal vez establecer una imagen transparente ya que el fondo funcionaría? – MrZander

Respuesta

2

Bueno, this resource file es la disposición de captura de código de barras escáner, que tiene un "visor" en capas sobre la parte superior de una vista previa de la cámara. Usan su propio recurso @color/transparent, definido como <color name="transparent">#00000000</color>. Tal vez hurgue con su código e intente descubrir dónde difieren usted y ellos.

0

¿Ha intentado establecer tanto el src como el fondo en @null?

Además, si esta avenida no funciona, podría considerar usar una ruta para dibujar en la superficie, lo que le permitiría cambiar dinámicamente el tamaño/ubicación del rectángulo en tiempo de ejecución.

Eso requeriría, sin embargo, escribir algún código para un SurfaceView y manejar el onDraw, que podría ser excesivo para lo que está haciendo. Esencialmente, significaría hacer que su clase personalizada aquí sea una extensión de SurfaceView, en lugar de una capa superpuesta.

+0

Hm, probaré el enfoque nulo. He intentado volver a trabajar para usar una vista única que se deriva de SurfaceView, uniendo los dos en uno (reemplazando onDraw en el SurfaceView derivado para dibujar la superposición, con la misma técnica Paint-rectangle), sin embargo, obtengo el mismo resultado, lo creas o no. – Bobby

0

He estado haciendo exactamente lo mismo, tengo una superposición de vista personalizada en la vista previa de la cámara. Inicialmente, la vista era opaca por lo que se bloqueó la vista previa de la cámara. El problema era que estaba tratando de dibujar una imagen en el lienzo pero especificó la imagen como RGB_565, cambiarla a ARGB_8888 funciona bien. Debe tener el canal alfa y asegurarse de que el fondo de la vista personalizada esté configurado como transparente.

0

Configuré el canal alfa en 0. Funciona como un amuleto.

Lo hago después de agregar el tiempo de ejecución de la vista personalizada.

(ImageView) myCustomView.setAlpha(0) 
Cuestiones relacionadas