using System;
|
using Android.Content;
|
using Android.Graphics;
|
using Android.Util;
|
using Android.Views;
|
using Android.Widget;
|
|
namespace GateWay.Droid
|
{
|
public class ZXingOverlayView: View
|
{
|
float screenRate;
|
float lineWidth;
|
float textSize;
|
float left;
|
float width;
|
float height;
|
float top;
|
Paint paint;
|
public ZXingOverlayView(Context context) : base(context)
|
{
|
InitData(context);
|
}
|
|
public ZXingOverlayView(Context context, IAttributeSet attrs) : base(context, attrs)
|
{
|
InitData(context);
|
}
|
|
public override void Draw(Canvas canvas)
|
{
|
left = canvas.Width * 0.125f;
|
width = canvas.Width * 0.75f;
|
height = canvas.Width * 0.75f;
|
top = (canvas.Height - height) / 2;
|
|
paint = new Paint { AntiAlias = true, };
|
paint.SetStyle(Paint.Style.FillAndStroke);
|
|
AddScreenFillRect(canvas);
|
AddCenterClearRect(canvas);
|
AddWhiteCanvas(canvas);
|
AddCornerLineWithCanvas(canvas);
|
//AddTextWithCanvas(canvas);
|
}
|
|
private void InitData(Context context)
|
{
|
screenRate = 15 * context.Resources.DisplayMetrics.Density;
|
lineWidth = 2 * context.Resources.DisplayMetrics.Density;
|
textSize = 16 * context.Resources.DisplayMetrics.Density;
|
|
|
}
|
|
//添加屏幕半透明填充色
|
private void AddScreenFillRect(Canvas canvas)
|
{
|
paint.Color = Color.Black;
|
paint.Alpha = 128;
|
|
canvas.DrawRect(0, 0, canvas.Width, top, paint);
|
canvas.DrawRect(0, top, left, top + width, paint);
|
canvas.DrawRect(width + left, top, canvas.Width, top + width, paint);
|
canvas.DrawRect(0, top + width, canvas.Width, canvas.Height, paint);
|
}
|
//添加中心全透明填充色
|
private void AddCenterClearRect(Canvas canvas)
|
{
|
paint.Color = Color.Transparent;
|
|
canvas.DrawRect(left, top, left + width, top + width, paint);
|
}
|
//添加白色方框
|
private void AddWhiteCanvas(Canvas canvas)
|
{
|
paint.Color = Color.Rgb(255, 255, 255);
|
|
canvas.DrawRect(left, top, left + width, top + 2, paint);
|
canvas.DrawRect(left, top, left + 2, top + height, paint);
|
canvas.DrawRect(left + width, top, left + width + 2, top + height, paint);
|
canvas.DrawRect(left, top + height, left + width, top + height + 2, paint);
|
}
|
//添加四个角的蓝色
|
private void AddCornerLineWithCanvas(Canvas canvas)
|
{
|
paint.Color = Color.Rgb(22, 118, 188);
|
|
canvas.DrawRect(left, top, left + screenRate, top + lineWidth, paint);
|
canvas.DrawRect(left, top, left + lineWidth, top + screenRate, paint);
|
canvas.DrawRect(left + width - screenRate, top, left + width, top + lineWidth, paint);
|
canvas.DrawRect(left + width, top, left + width + lineWidth, top + screenRate, paint);
|
canvas.DrawRect(left, top + width, left + screenRate, top + width + lineWidth, paint);
|
canvas.DrawRect(left, top + width - screenRate, left + lineWidth, top + width, paint);
|
canvas.DrawRect(left + width - screenRate, top + width, left + width + lineWidth, top + width + lineWidth, paint);
|
canvas.DrawRect(left + width, top + width - screenRate, left + width + lineWidth, top + width + lineWidth, paint);
|
}
|
//添加文字提醒
|
private void AddTextWithCanvas(Canvas canvas)
|
{
|
paint.Color = Color.Rgb(255, 255, 255);
|
paint.SetTypeface(Typeface.DefaultBold);
|
paint.TextSize = textSize;
|
string text = "BottomText";
|
|
float textWidth = paint.MeasureText(text);
|
|
canvas.DrawText(text, (canvas.Width - textWidth) / 2, top + width + textSize, paint);
|
|
|
//canvas.DrawText("返回", 50, 100, paint);
|
|
}
|
|
|
|
}
|
}
|