示例#1
0
        protected override void Dispose(bool disposing) {
            lock (this) {
                // Detach objects
                if (_baseMapViewRenderer != null) {
                    _baseMapViewRenderer.Detach();
                }
                if (_redrawRequestListener != null) {
                    _redrawRequestListener.Detach();
                }
                if (_baseMapView != null) {
                    _baseMapView.SetRedrawRequestListener(null);
                }

                // Dispose objects
                if (_configChooser != null) {
                    _configChooser.Dispose();
                    _configChooser = null;
                }
                if (_baseMapViewRenderer != null) {
                    _baseMapViewRenderer.Dispose(); // allow the Java object to be collected later
                    _baseMapViewRenderer = null;
                }
                if (_baseMapView != null) {
                    _baseMapView.Dispose();
                    _baseMapView = null;
                }
                if (_redrawRequestListener != null) {
                    _redrawRequestListener.Dispose();
                    _redrawRequestListener = null;
                }
            }
            base.Dispose(disposing);
        }
示例#2
0
        /// <summary>
        /// Constructs a new MapView object from a context object and attributes.
        /// </summary>
        /// <param name="context">The context object.</param>
        /// <param name="attrs">The attributes.</param>
        public MapView(Context context, IAttributeSet attrs) : base(context, attrs) {
            // Connect context info and assets manager to native part
            AndroidUtils.SetContext (context);
            if (_assetManager == null) {
                Carto.Utils.Log.Warn("MapView: MapView created before MapView.RegisterLicense is called");

                _assetManager = context.ApplicationContext.Assets;
                AssetUtils.SetAssetManagerPointer(_assetManager);
            }

            // Create base map view, attach redraw listener
            _baseMapView = new BaseMapView();
            _baseMapView.GetOptions().DPI = (int)Resources.DisplayMetrics.DensityDpi;

            _redrawRequestListener = new MapRedrawRequestListener(this);
            _baseMapView.SetRedrawRequestListener(_redrawRequestListener);

            // Create base map renderer and EGL configuration chooser
            _baseMapViewRenderer = new BaseMapViewRenderer(_baseMapView);

            _configChooser = new ConfigChooser();

            try {
                System.Reflection.PropertyInfo prop = typeof(GLSurfaceView).GetProperty("PreserveEGLContextOnPause");
                prop.SetValue(this, true);
            } catch (System.Exception) {
                Carto.Utils.Log.Info("MapView: Preserving EGL context on pause is not possible");
            }

            SetEGLContextClientVersion(2);
            SetEGLConfigChooser(_configChooser);
            SetRenderer(_baseMapViewRenderer);
            RenderMode = Rendermode.WhenDirty;
        }