SOURCE download
Before using zxing to do development, all kinds of wonderful problems, horizontal screen repair and so on, but also do not engage in performance. The test batch, no way to change the Zbar later. The performance is much better.
Direct, look at the effect
2. Search box on the interface
/** * 2014-7-15 a.m. 11:14:21 * Created by Niexiaoqiang */package Com.example.qu;import Android.content.context;import an Droid.graphics.canvas;import Android.graphics.paint;import Android.graphics.rect;import Android.graphics.drawable.drawable;import android.util.attributeset;import android.view.view;/** * Find box * @author Niexiaoqiang */public class Finderview extends View {private static final long Animation_delay = 30;private Paint Finderma skpaint;private int measureedwidth;private int Measureedheight;public Finderview (context context) {super (context); Init (context);} Public Finderview (context context, AttributeSet Attrs) {Super (context, attrs); init (context);} @Overrideprotected void OnDraw (canvas canvas) {super.ondraw (canvas); Canvas.drawrect (Leftrect, findermaskpaint); Canvas.drawrect (Toprect, Findermaskpaint); Canvas.drawrect (Rightrect, Findermaskpaint); Canvas.drawRect (BottomRect , findermaskpaint);//Frame Zx_code_kuang.setbounds (Middlerect); Zx_code_kuang.draw (canvas); if (Linerect.bottom < Middlerect.bottom) {zx_code_line.setbounds (linerect); linerect.top = linerect.top + Lineheight/2;linerect.bottom = Linerect.bottom + LINEHEIGHT/2;} else {linerect.set (middlerect); linerect.bottom = Linerect.top + lineheight;zx_code_line.setbounds (lineRect);} Zx_code_line.draw (Canvas);p ostinvalidatedelayed (Animation_delay, Middlerect.left, Middlerect.top, Middlerect.right, Middlerect.bottom);} Private Rect toprect = new rect ();p rivate rect bottomrect = new rect ();p rivate rect rightrect = new rect ();p rivate rect le Ftrect = new rect ();p rivate rect middlerect = new rect ();p rivate rect linerect = new rect ();p rivate drawable Zx_code_kuang ;p rivate drawable zx_code_line;private int lineheight;private void init (context context) {int finder_mask = Context.getre Sources (). GetColor (r.color.finder_mask); findermaskpaint = new Paint (Paint.anti_alias_flag); Findermaskpaint.setcolor (finder_mask); Zx_code_kuang = Context.getresources (). Getdrawable (R.drawable.zx_code_ Kuang); zx_code_line = Context.getresourCES (). getdrawable (r.drawable.zx_code_line); lineheight = 30;} @Overrideprotected void onmeasure (int widthmeasurespec, int heightmeasurespec) {super.onmeasure (Widthmeasurespec, HEIGHTMEASURESPEC); measureedwidth = Measurespec.getsize (widthmeasurespec); measureedheight = MeasureSpec.getSize ( HEIGHTMEASURESPEC); int borderWidth = MEASUREEDWIDTH/2 + 100;middlerect.set ((measureedwidth-borderwidth)/2, (Measuree Dheight-borderwidth)/2, (Measureedwidth-borderwidth)/2 + borderWidth, (measureedheight-borderwidth)/2 + border Width); Linerect.set (middlerect); linerect.bottom = linerect.top + lineheight;leftrect.set (0, Middlerect.top, Middlerect.left, Middlerect.bottom); Toprect.set (0, 0, measureedwidth, middlerect.top); Rightrect.set ( Middlerect.right, Middlerect.top, Measureedwidth, Middlerect.bottom); Bottomrect.set (0, MiddleRect.bottom, Measureedwidth, Measureedheight);}}
2. Activity of the scan
Package Com.example.qu;import Net.sourceforge.zbar.config;import Net.sourceforge.zbar.image;import Net.sourceforge.zbar.imagescanner;import Net.sourceforge.zbar.symbol;import Net.sourceforge.zbar.SymbolSet; Import Android.app.activity;import Android.hardware.camera;import android.hardware.Camera.AutoFocusCallback; Import Android.hardware.camera.previewcallback;import Android.hardware.camera.size;import android.os.AsyncTask; Import Android.os.bundle;import android.os.handler;import android.util.log;import android.view.SurfaceHolder; Import Android.view.surfaceview;public class Mainactivity extends Activity implements Surfaceholder.callback {private Camera mcamera;private surfaceholder mholder;private surfaceview surface_view;private imagescanner scanner;private Handler autofocushandler;private asyncdecode asyncdecode; @Overrideprotected void OnCreate (Bundle savedinstancestate) {super.oncreate (savedinstancestate); Setcontentview (R.layout.ac_zbar_finder); init ();} private void Init () {Surface_vieW = (Surfaceview) Findviewbyid (r.id.surface_view); mholder = Surface_view.getholder (); Mholder.addcallback (this); Scanner = new Imagescanner (); scanner.setconfig (0, config.x_density, 3); Scanner.setconfig (0, config.y_density, 3); Autofocushandler = new Handler (); asyncdecode = new Asyncdecode ();} @Overridepublic void Surfacechanged (surfaceholder holder, int format, int width, int height) {if (mholder.getsurface () = = NULL) {return;} try {Mcamera.stoppreview ();} catch (Exception e) {}try {mcamera.setdisplayorientation (n); Mcamera.setpreviewdisplay ( Mholder); Mcamera.setpreviewcallback (Previewcallback); Mcamera.startpreview (); Mcamera.autofocus ( Autofocuscallback);} catch (Exception e) {log.d ("DBG", "Error starting camera preview:" + e.getmessage ());}} /** * Preview Data */previewcallback previewcallback = new Previewcallback () {public void Onpreviewframe (byte[] data, Camera Camer A) {if (asyncdecode.isstoped ()) {Camera.parameters Parameters = Camera.getparameters (); Size size = Parameters.getpreviewsize (); Image Barcode = new Image (size.width, Size.Height, "Y800"); Barcode.setdata (data); Asyncdecode = new Asyncdecode (); Asyncdecode.execute (barcode);}}; Private class Asyncdecode extends Asynctask<image, Void, void> {private Boolean stoped = true; @Overrideprotected Voi D doinbackground (Image ... params) {stoped = False;image barcode = Params[0];int result = scanner.scanimage (barcode); if (re Sult! = 0) {//mcamera.setpreviewcallback (null);//mcamera.stoppreview (); Symbolset syms = Scanner.getresults (); System.out.println (syms); for (Symbol sym:syms) {log.d ("Xiaoqiang", Sym.getdata ());}} return null;} @Overrideprotected void OnPostExecute (void result) {Super.onpostexecute (result); stoped = true;} public Boolean isstoped () {return stoped;}} /** * AF callback */autofocuscallback autofocuscallback = new Autofocuscallback () {public void Onautofocus (Boolean success, Cam ERA camera) {autofocushandler.postdelayed (doautofocus, 1000);}};/ /Autofocus Private Runnable Doautofocus = new Runnable () {public void run () {if (null = = Mcamera | | NULL = = Autofocuscallback) {return;} Mcamera.autofocus (Autofocuscallback);}}; @Overridepublic void surfacecreated (Surfaceholder holder) {try {Mcamera = Camera.open ()} catch (Exception e) {Mcamera = n ull;}} @Overridepublic void surfacedestroyed (Surfaceholder holder) {if (Mcamera! = null) {mcamera.setpreviewcallback (null); Mcamera.release (); mcamera = null;}}}