Java tutorial
/* * Copyright (C) The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package it.jaschke.alexandria; import android.content.Context; import android.content.Intent; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.RectF; import android.support.v4.content.LocalBroadcastManager; import it.jaschke.alexandria.CameraPreview.GraphicOverlay; import com.google.android.gms.vision.MultiProcessor; import com.google.android.gms.vision.Tracker; import com.google.android.gms.vision.barcode.Barcode; /** * Factory for creating a tracker and associated graphic to be associated with a new barcode. The * multi-processor uses this factory to create barcode trackers as needed -- one for each barcode. */ class BarcodeTrackerFactory implements MultiProcessor.Factory<Barcode> { private GraphicOverlay mGraphicOverlay; private Context mContext; BarcodeTrackerFactory(GraphicOverlay graphicOverlay, Context ctx) { mGraphicOverlay = graphicOverlay; mContext = ctx; } @Override public Tracker<Barcode> create(Barcode barcode) { BarcodeGraphic graphic = new BarcodeGraphic(mGraphicOverlay, mContext); return new GraphicTracker<>(mGraphicOverlay, graphic); } } /** * Graphic instance for rendering barcode position, size, and ID within an associated graphic * overlay view. */ class BarcodeGraphic extends TrackedGraphic<Barcode> { private static final int COLOR_CHOICES[] = { Color.BLUE, Color.CYAN, Color.GREEN }; private static int mCurrentColorIndex = 0; private Paint mRectPaint; private Paint mTextPaint; private volatile Barcode mBarcode; private Context mContext; BarcodeGraphic(GraphicOverlay overlay, Context ctx) { super(overlay); mContext = ctx; mCurrentColorIndex = (mCurrentColorIndex + 1) % COLOR_CHOICES.length; final int selectedColor = COLOR_CHOICES[mCurrentColorIndex]; mRectPaint = new Paint(); mRectPaint.setColor(selectedColor); mRectPaint.setStyle(Paint.Style.STROKE); mRectPaint.setStrokeWidth(4.0f); mTextPaint = new Paint(); mTextPaint.setColor(selectedColor); mTextPaint.setTextSize(80.0f); } /** * Updates the barcode instance from the detection of the most recent frame. Invalidates the * relevant portions of the overlay to trigger a redraw. */ void updateItem(Barcode barcode) { mBarcode = barcode; postInvalidate(); } /** * Draws the barcode annotations for position, size, and raw value on the supplied canvas. */ @Override public void draw(Canvas canvas) { Barcode barcode = mBarcode; if (barcode == null) { return; } // Draws the bounding box around the barcode. RectF rect = new RectF(barcode.getBoundingBox()); rect.left = translateX(rect.left); //rect.top = translateY(rect.top); //rect.right = translateX(rect.right); rect.bottom = translateY(rect.bottom); //canvas.drawRect(rect, mRectPaint); // Draws a label at the bottom of the barcode indicate the barcode value that was detected. canvas.drawText(barcode.rawValue, rect.left, rect.bottom, mTextPaint); sendMessage(barcode.rawValue); } private void sendMessage(String s) { Intent intent = new Intent("BarcodeDetected"); // add data intent.putExtra("RawValue", s); LocalBroadcastManager.getInstance(mContext).sendBroadcast(intent); } }