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); } } }