• android上画方框


    来自zxing开源码

     public Rect getFramingRect() {
        if (framingRect == null) {
          if (camera == null) {
            return null;
          }
          Point screenResolution = configManager.getScreenResolution();
          int width = screenResolution.x * 3 / 4;
         /* if (width < MIN_FRAME_WIDTH) {
            width = MIN_FRAME_WIDTH;
          } else if (width > MAX_FRAME_WIDTH) {
            width = MAX_FRAME_WIDTH;
          }*/
          int height = screenResolution.y * 3 / 4;
         /* if (height < MIN_FRAME_HEIGHT) {
            height = MIN_FRAME_HEIGHT;
          } else if (height > MAX_FRAME_HEIGHT) {
            height = MAX_FRAME_HEIGHT;
          }*/
          int leftOffset = (screenResolution.x - width) / 2;
          int topOffset = (screenResolution.y - height) / 2;
          framingRect = new Rect(leftOffset, topOffset, leftOffset + width, topOffset + height);
          Log.d(TAG, "Calculated framing rect: " + framingRect);
        }
        return framingRect;
      }
    
    
    
    
    
     public Rect getFramingRectInPreview() {
        if (framingRectInPreview == null) {
          Rect framingRect = getFramingRect();
          if (framingRect == null) {
            return null;
          }
          Rect rect = new Rect(framingRect);
          Point cameraResolution = configManager.getCameraResolution();
          Point screenResolution = configManager.getScreenResolution();
          rect.left = rect.left * cameraResolution.x / screenResolution.x;
          rect.right = rect.right * cameraResolution.x / screenResolution.x;
          rect.top = rect.top * cameraResolution.y / screenResolution.y;
          rect.bottom = rect.bottom * cameraResolution.y / screenResolution.y;
          framingRectInPreview = rect;
        }
        return framingRectInPreview;
      }
    
    
    
    
    @Override
      public void onDraw(Canvas canvas) {
        Rect frame = cameraManager.getFramingRect();
        if (frame == null) {
          return;
        }
        int width = canvas.getWidth();
        int height = canvas.getHeight();
    
        // Draw the exterior (i.e. outside the framing rect) darkened
        paint.setColor(resultBitmap != null ? resultColor : maskColor);
        canvas.drawRect(0, 0, width, frame.top, paint);
        canvas.drawRect(0, frame.top, frame.left, frame.bottom + 1, paint);
        canvas.drawRect(frame.right + 1, frame.top, width, frame.bottom + 1, paint);
        canvas.drawRect(0, frame.bottom + 1, width, height, paint);
    
        if (resultBitmap != null) {
          // Draw the opaque result bitmap over the scanning rectangle
          paint.setAlpha(CURRENT_POINT_OPACITY);
          canvas.drawBitmap(resultBitmap, null, frame, paint);
        } else {
    
          // Draw a two pixel solid black border inside the framing rect
          paint.setColor(frameColor);
          canvas.drawRect(frame.left, frame.top, frame.right + 1, frame.top + 2, paint);
          canvas.drawRect(frame.left, frame.top + 2, frame.left + 2, frame.bottom - 1, paint);
          canvas.drawRect(frame.right - 1, frame.top, frame.right + 1, frame.bottom - 1, paint);
          canvas.drawRect(frame.left, frame.bottom - 1, frame.right + 1, frame.bottom + 1, paint);
    
          // Draw a red "laser scanner" line through the middle to show decoding is active
          paint.setColor(laserColor);
          paint.setAlpha(SCANNER_ALPHA[scannerAlpha]);
          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.getFramingRectInPreview();
          float scaleX = frame.width() / (float) previewFrame.width();
          float scaleY = frame.height() / (float) previewFrame.height();
    
          List<ResultPoint> currentPossible = possibleResultPoints;
          List<ResultPoint> currentLast = lastPossibleResultPoints;
          int frameLeft = frame.left;
          int frameTop = frame.top;
          if (currentPossible.isEmpty()) {
            lastPossibleResultPoints = null;
          } else {
            possibleResultPoints = new ArrayList<ResultPoint>(5);
            lastPossibleResultPoints = currentPossible;
            paint.setAlpha(CURRENT_POINT_OPACITY);
            paint.setColor(resultPointColor);
            synchronized (currentPossible) {
              for (ResultPoint point : currentPossible) {
                canvas.drawCircle(frameLeft + (int) (point.getX() * scaleX),
                                  frameTop + (int) (point.getY() * scaleY),
                                  POINT_SIZE, paint);
              }
            }
          }
          if (currentLast != null) {
            paint.setAlpha(CURRENT_POINT_OPACITY / 2);
            paint.setColor(resultPointColor);
            synchronized (currentLast) {
              float radius = POINT_SIZE / 2.0f;
              for (ResultPoint point : currentLast) {
                canvas.drawCircle(frameLeft + (int) (point.getX() * scaleX),
                                  frameTop + (int) (point.getY() * scaleY),
                                  radius, paint);
              }
            }
          }
    
          // Request another update at the animation interval, but only repaint the laser line,
          // not the entire viewfinder mask.
          postInvalidateDelayed(ANIMATION_DELAY,
                                frame.left - POINT_SIZE,
                                frame.top - POINT_SIZE,
                                frame.right + POINT_SIZE,
                                frame.bottom + POINT_SIZE);
        }
      }

    运行效果图

    Crazy Cherry:everything is possible!
  • 相关阅读:
    访问修饰符
    SqlServer 查运行进程
    SqlServer 作业计时执行存储过程,杀超时进程
    VS快捷键操作
    sql server 命令
    vs 加载 dev控件
    TreeList显示[+] [-] 线条样式
    佳能MG2580S清零
    Dev WaitDialog 使用
    导出.txt / .pdf / .xls
  • 原文地址:https://www.cnblogs.com/userbibi/p/2688283.html
Copyright © 2020-2023  润新知