ZXing Barcode Reader: How to make custom border around capture screen?

后端 未结 4 1340
时光取名叫无心
时光取名叫无心 2020-12-30 11:38

I want to put custom border around zxing capture screen (camera screen). What modification would I need to make for this? Which activity and layouts would I need to change

相关标签:
4条回答
  • 2020-12-30 12:08

    Here is how a few others on SO did it.

    Also look here, it looked useful.

    Finally, I would use this one.

    0 讨论(0)
  • 2020-12-30 12:09

    Actually you can override the color in your own colors.xml file i.e.

    <color name="viewfinder_border">#00d1cf</color>
    
    0 讨论(0)
  • 2020-12-30 12:20

    This question already has an answer. But if someone needs how to draw a border around capture screen, here is the code. inazaruk's answer is correct. My answer is just an extension for that.

     //initialize new paint in the constructor
     Paint borderPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
     borderPaint.setColor(ContextCompat.getColor(context, R.color.colorPrimary));
    
     //inside onDraw
     int distance = (frame.bottom - frame.top) / 4;
     int thickness = 15;
    
     //top left corner
     canvas.drawRect(frame.left - thickness, frame.top - thickness, distance + frame.left, frame.top, borderPaint);
     canvas.drawRect(frame.left - thickness, frame.top, frame.left, distance + frame.top, borderPaint);
    
     //top right corner
     canvas.drawRect(frame.right - distance, frame.top - thickness, frame.right + thickness, frame.top, borderPaint);
     canvas.drawRect(frame.right, frame.top, frame.right + thickness, distance + frame.top, borderPaint);
    
     //bottom left corner
     canvas.drawRect(frame.left - thickness, frame.bottom, distance + frame.left, frame.bottom + thickness, borderPaint);
     canvas.drawRect(frame.left - thickness, frame.bottom - distance, frame.left, frame.bottom, borderPaint);
    
     //bottom right corner
     canvas.drawRect(frame.right - distance, frame.bottom, frame.right + thickness, frame.bottom + thickness, borderPaint);
     canvas.drawRect(frame.right, frame.bottom - distance, frame.right + thickness, frame.bottom, borderPaint);
    

    0 讨论(0)
  • 2020-12-30 12:26

    You don't need to edit layouts at all.

    In ViewfinderView find onDraw method. It's the core that draws the "scanning rectangle". You can modify it the way you want.

    The code that actually draws the rectangle can be found here:

    // 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);
    
    0 讨论(0)
提交回复
热议问题