public SurfaceCallback(CameraSourcePreview parent)
 {
     Parent = parent;
 }
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            SetContentView(Resource.Layout.BarcodeTracker);

            //this.ActionBar.SetDisplayHomeAsUpEnabled(true);

            buttonFlash        = FindViewById <TextView>(Resource.Id.btnFlash2);
            buttonFlash.Click += ButtonFlash_Click;

            var buttonExit = FindViewById <ImageButton>(Resource.Id.btnExit);

            buttonExit.Click += ButtonExit_Click;

            Intent intent = new Intent(this.Intent);

            rowPosition = 0;
            IsContinue  = intent.GetBooleanExtra("IsContinue", false);
            IsFixed     = intent.GetBooleanExtra("IsFixed", false);

            AllScanBarcode       = intent.GetStringArrayListExtra("AllScanBarcode");
            ScanCompletedBarcode = intent.GetStringArrayListExtra("ScanCompletedBarcode");
            SaveCompletedBarcode = intent.GetStringArrayListExtra("SaveCompletedBarcode");

            mPreview        = FindViewById <CameraSourcePreview>(Resource.Id.preview);
            mGraphicOverlay = FindViewById <GraphicOverlay>(Resource.Id.barcodeOverlay);

            //mView = FindViewById<TouchView>(Resource.Id.left_top_view);
            //mView.setRec(rec);

            //BarcodeFormat supportBarcodeFormat = new BarcodeFormat();
            //supportBarcodeFormat |= BarcodeFormat.Code128;
            //supportBarcodeFormat |= BarcodeFormat.Ean13;

            string jsonList = Xamarin.Forms.Application.Current.Properties["SupportBarcodeFormat"].ToString();
            List <Helpers.BarcodeFormat> tmpList = JsonConvert.DeserializeObject <List <Helpers.BarcodeFormat> >(jsonList);

            Detector detector = null;

            //Xamarin.Android에서 AztecCode를 사용하기 위해서는 바코드 지원타입을 비워놔야 한다.
            //AztecCode 지원코드는 4096인데 Xamarin.Android에선 코드 타입이 없고 전체로 하면 스캔 가능한다.
            if (tmpList.Contains(Helpers.BarcodeFormat.AztecCode))
            {
                detector = new BarcodeDetector.Builder(Application.Context)
                           .Build();
            }
            else
            {
                var barcodeFormat = ConvertToAndroid(JsonConvert.DeserializeObject <List <Helpers.BarcodeFormat> >(jsonList));
                detector = new BarcodeDetector.Builder(Application.Context)
                           .SetBarcodeFormats(barcodeFormat)
                           .Build();
            }

            detector.SetProcessor(new MultiProcessor.Builder(new GraphicBarcodeTrackerFactory(mGraphicOverlay, this)).Build());

            //FocusingProcessor를 사용해도 되기는 하나 한번 포커스 지정되고 나서 연속 스캔할때 벗어나도 계속 스캐되는 버그가 있음.
            //detector.SetProcessor(new CentralBarcodeFocusingProcessor(detector, new GraphicBarcodeTracker(mGraphicOverlay, this)));

            if (!detector.IsOperational)
            {
                Android.Util.Log.Warn(TAG, "Barcode detector dependencies are not yet available.");
            }

            mCameraSource = new CameraSource.Builder(Application.Context, detector)
                            .SetRequestedPreviewSize((int)DeviceDisplay.MainDisplayInfo.Height, (int)DeviceDisplay.MainDisplayInfo.Width) //Max Size :  1920 x 1080 (아이폰과 동일함)
                                                                                                                                          //.SetRequestedPreviewSize(1600, 1200)
                            .SetFacing(CameraFacing.Back)
                            .SetRequestedFps(30.0f)                                                                                       //안드로이 공식샘플은 15.0f 로 되어 있으나 기본값은 30.0f
                            .SetAutoFocusEnabled(true)
                            .Build();

            _playerBeep    = MediaPlayer.Create(this, Resource.Raw.beep07); //Beep음 (Scandit과 동일함)
            _playerCaution = MediaPlayer.Create(this, Resource.Raw.beep06); //경고음.
        }