diff --git a/README.md b/README.md index 75a07c2..3623bdf 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,7 @@ Arguments: text_instructions: "OPTIONAL Instruction Text - default = 'Please point your camera at the QR code.'", // Android only camera: "front" || "back" // defaults to "back" flash: "on" || "off" || "auto" // defaults to "auto". See Quirks + drawSight : "true" || "false" //default use true, create a red/green sight to center barcode } ``` diff --git a/android/ZBarScannerActivity.java b/android/ZBarScannerActivity.java index b04fa97..0146510 100644 --- a/android/ZBarScannerActivity.java +++ b/android/ZBarScannerActivity.java @@ -8,6 +8,10 @@ import org.json.JSONObject; import android.app.Activity; import android.content.Intent; import android.content.res.Resources; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Paint.Style; +import android.graphics.drawable.ShapeDrawable; import android.hardware.Camera; import android.hardware.Camera.CameraInfo; import android.hardware.Camera.PreviewCallback; @@ -18,8 +22,12 @@ import android.util.Log; import android.view.Gravity; import android.view.SurfaceHolder; import android.view.SurfaceView; +import android.view.View; import android.view.ViewGroup; +import android.view.ViewGroup.LayoutParams; +import android.view.ViewTreeObserver; import android.widget.FrameLayout; +import android.widget.RelativeLayout; import android.widget.TextView; import net.sourceforge.zbar.ImageScanner; @@ -53,6 +61,16 @@ implements SurfaceHolder.Callback { // Customisable stuff String whichCamera; String flashMode; + + + /* START - ALMAVIVA */ + RelativeLayout relativeLayout; + RelativeLayout line; + View parent; + int width; + int height; + boolean drawSight = false; + /* END - ALMAVIVA */ // For retrieving R.* resources, from the actual app package // (we can't use actual.application.package.R.* in our code as we @@ -69,6 +87,9 @@ implements SurfaceHolder.Callback { // Activity Lifecycle ---------------------------------------------- + /* (non-Javadoc) + * @see android.app.Activity#onCreate(android.os.Bundle) + */ @Override public void onCreate (Bundle savedInstanceState) { @@ -84,6 +105,7 @@ implements SurfaceHolder.Callback { String textInstructions = params.optString("text_instructions"); whichCamera = params.optString("camera"); flashMode = params.optString("flash"); + drawSight = params.optString("drawSight") != null ? Boolean.valueOf(params.optString("drawSight").toLowerCase()) : false; // Initiate instance variables autoFocusHandler = new Handler(); @@ -120,6 +142,65 @@ implements SurfaceHolder.Callback { ((FrameLayout) findViewById(getResourceId("id/csZbarScannerView"))).addView(scannerSurface); findViewById(getResourceId("id/csZbarScannerTitle")).bringToFront(); findViewById(getResourceId("id/csZbarScannerInstructions")).bringToFront(); + + /* START - ALMAVIVA */ + // Creating a new RelativeLayout + if(drawSight){ + relativeLayout = new RelativeLayout(this); + line = new RelativeLayout(this); + + // Defining the RelativeLayout layout parameters. + // In this case I want to fill its parent + + parent = ((FrameLayout) findViewById(getResourceId("id/csZbarScannerView"))); + + + parent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { + + @Override + public void onGlobalLayout() { + // Ensure you call it only once : + parent.getViewTreeObserver().removeGlobalOnLayoutListener(this); + + width = parent.getWidth(); + height = parent.getHeight(); + double dim = width < height ? (width / 1.2) : (height / 1.2); + RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams((int)dim,(int)dim); + rlp.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE); + rlp.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE); + rlp.addRule(RelativeLayout.CENTER_VERTICAL, RelativeLayout.TRUE); + relativeLayout.setGravity(Gravity.CENTER); + relativeLayout.setLayoutParams(rlp); + relativeLayout.invalidate(); + relativeLayout.requestLayout(); + + RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(((int)dim - 16),8); + lp.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE); + lp.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE); + lp.addRule(RelativeLayout.CENTER_VERTICAL, RelativeLayout.TRUE); + line.setGravity(Gravity.CENTER); + line.setLayoutParams(lp); + line.setBackgroundColor(Color.RED); + line.invalidate(); + line.requestLayout(); + } + }); + + ShapeDrawable rectShapeDrawable = new ShapeDrawable(); // pre defined class + // get paint + Paint paint = rectShapeDrawable.getPaint(); + + // set border color, stroke and stroke width + paint.setColor(Color.GREEN); + paint.setStyle(Style.STROKE); + paint.setStrokeWidth(8); // you can change the value of 5 + relativeLayout.setBackgroundDrawable(rectShapeDrawable); + + + relativeLayout.addView(line); + ((RelativeLayout) findViewById(getResourceId("id/csZbarScannerViewContainer"))).addView(relativeLayout); + } + /* END - ALMAVIVA */ } @Override diff --git a/android/res/layout/cszbarscanner.xml b/android/res/layout/cszbarscanner.xml index 5e26bca..168e92d 100644 --- a/android/res/layout/cszbarscanner.xml +++ b/android/res/layout/cszbarscanner.xml @@ -1,38 +1,44 @@ - - - - - - - + android:layout_height="match_parent" > + + + + + + + + + diff --git a/ios/CsZBar.m b/ios/CsZBar.m index 0af3803..c83e4fd 100644 --- a/ios/CsZBar.m +++ b/ios/CsZBar.m @@ -61,8 +61,8 @@ } // Hack to hide the bottom bar's Info button... http://stackoverflow.com/a/16353530 - UIView *infoButton = [[[[[self.scanReader.view.subviews objectAtIndex:1] subviews] objectAtIndex:0] subviews] objectAtIndex:3]; - [infoButton setHidden:YES]; + //UIView *infoButton = [[[[[self.scanReader.view.subviews objectAtIndex:1] subviews] objectAtIndex:0] subviews] objectAtIndex:3]; + //[infoButton setHidden:YES]; [self.viewController presentModalViewController: self.scanReader animated: YES]; } diff --git a/ios/libzbar.a b/ios/libzbar.a index defbed4..7533efb 100644 Binary files a/ios/libzbar.a and b/ios/libzbar.a differ