Aller au contenu

Un layer sur une surface view ?


Chemical

Recommended Posts

Bonjour,

Pour mon application j'ai besoin de rajouter un "calque" sur une SurfaceView (la surfaceview affiche le preview de ma caméra).

En gros j'aimerais tracer un CADRE (un peu style barcode scanner) par dessus la preview de ma caméra, est-ce possible et comment pourrais-je m'y prendre ?

Pour le moment j'ai essayé plusieurs choses, au départ un linear layout mais je me suis rendu compte qu'il n'y a pas de Z-offset pour faire passer l'image en foreground et l'autre en bg...

Et puis la, je viens de tomber sur les Layer-list... Ca m'a l'air bien compliqué... et surtout ça me revoi des :

ERROR/AndroidRuntime(21393): Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #5: invalid drawable tag SurfaceView
...

Donc voila, il y a peut-être une limitation ?

Merci pour vos réponses !

Lien vers le commentaire
Partager sur d’autres sites

C'est tout à faire possible.

Dans un premier temps tu définis ta classe "calque" qui étend View et surcharge onDraw() avec ton gabarit:

package com.chemical.scan

public final class ScanViewLayer extends View {
 @Override
 public void onDraw(Canvas canvas) {
   ...
 }
}

Puis tu insères ton gabarit dans le layout XML (@layout/scan_layout.xml) de ton activity de scan (superposé à ton SurfaceView en utilisant un FrameLayout):

<?xml version="1.0" encoding="UTF-8"?>
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent" 
   android:layout_height="fill_parent" >

       android:id="@+id/surface_view"
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" />

       android:id="@+id/scan_view_layer"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent"
       android:background="#ff000000" />


Ce qui donne ton Activity de scan comme suit:

public final class ScanActivity extends Activity {

   @Override
   public void onCreate(Bundle bundle) {
       super.onCreate(bundle);
       setContentView(R.layout.scan_layout);
       }

}

Tout ceci est bien entendu schématique. Pour un exemple complet je ne peux que te renvoyer au code source de l'application Barcode Scanner (ZXing) ici même:

http://code.google.com/p/zxing/source/browse/trunk

Eric

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...