package com.google.zxing.client.android;
+import com.google.zxing.ResultPoint;
+import com.google.zxing.client.android.camera.CameraManager;
+
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.View;
-import com.google.zxing.ResultPoint;
import java.util.Collection;
import java.util.HashSet;
* @author dswitkin@google.com (Daniel Switkin)
*/
public final class ViewfinderView extends View {
+
private static final int[] SCANNER_ALPHA = {0, 64, 128, 192, 255, 192, 128, 64};
private static final long ANIMATION_DELAY = 100L;
private static final int OPAQUE = 0xFF;
if (resultBitmap != null) {
// Draw the opaque result bitmap over the scanning rectangle
paint.setAlpha(OPAQUE);
- canvas.drawBitmap(resultBitmap, frame.left, frame.top, paint);
+ canvas.drawBitmap(resultBitmap, null, frame, paint);
} else {
// Draw a two pixel solid black border inside the framing rect
scannerAlpha = (scannerAlpha + 1) % SCANNER_ALPHA.length;
int middle = frame.height() / 2 + frame.top;
canvas.drawRect(frame.left + 2, middle - 1, frame.right - 1, middle + 2, paint);
+
+ Rect previewFrame = CameraManager.get().getFramingRectInPreview();
+ float scaleX = frame.width() / (float) previewFrame.width();
+ float scaleY = frame.height() / (float) previewFrame.height();
Collection<ResultPoint> currentPossible = possibleResultPoints;
Collection<ResultPoint> currentLast = lastPossibleResultPoints;
paint.setAlpha(OPAQUE);
paint.setColor(resultPointColor);
for (ResultPoint point : currentPossible) {
- canvas.drawCircle(frame.left + point.getX(), frame.top + point.getY(), 6.0f, paint);
+ canvas.drawCircle(frame.left + (int) (point.getX() * scaleX),
+ frame.top + (int) (point.getY() * scaleY),
+ 6.0f, paint);
}
}
if (currentLast != null) {
paint.setAlpha(OPAQUE / 2);
paint.setColor(resultPointColor);
for (ResultPoint point : currentLast) {
- canvas.drawCircle(frame.left + point.getX(), frame.top + point.getY(), 3.0f, paint);
+ canvas.drawCircle(frame.left + (int) (point.getX() * scaleX),
+ frame.top + (int) (point.getY() * scaleY),
+ 3.0f, paint);
}
}