====== Source Code AndroidEditionSample DrawEditFeatures.zip ======
====MainActivity.cs====
using Android.App;
using Android.OS;
using Android.Views;
using Android.Widget;
using System;
using System.Collections.Generic;
using ThinkGeo.MapSuite.AndroidEdition;
using ThinkGeo.MapSuite.Core;
namespace DrawEditFeatures
{
[Activity(Label = "Draw Edit", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity
{
private int contentHeight;
private MapView androidMap;
private ImageButton editButton;
private ImageButton lineButton;
private ImageButton pointButton;
private ImageButton clearButton;
private ImageButton cursorButton;
private ImageButton circleButton;
private ImageButton polygonButton;
private ImageButton ellipseButton;
private ImageButton rectangleButton;
private ImageButton drawButton;
private LinearLayout trackLinearLayout;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);
WorldMapKitOverlay worldOverlay = new WorldMapKitOverlay();
androidMap = FindViewById(Resource.Id.androidmap);
androidMap.MapUnit = GeographyUnit.DecimalDegree;
androidMap.CurrentExtent = new RectangleShape(-180.0, 83.0, 180.0, -90.0);
androidMap.Overlays.Add(worldOverlay);
cursorButton = GetButton(Resource.Drawable.Cursor, TrackButtonClick);
drawButton = GetButton(Resource.Drawable.Draw, TrackButtonClick);
pointButton = GetButton(Resource.Drawable.Point, TrackButtonClick);
lineButton = GetButton(Resource.Drawable.Line, TrackButtonClick);
rectangleButton = GetButton(Resource.Drawable.Rectangle, TrackButtonClick);
circleButton = GetButton(Resource.Drawable.Circle, TrackButtonClick);
polygonButton = GetButton(Resource.Drawable.Polygon, TrackButtonClick);
ellipseButton = GetButton(Resource.Drawable.Ellipse, TrackButtonClick);
editButton = GetButton(Resource.Drawable.Edit, TrackButtonClick);
clearButton = GetButton(Resource.Drawable.Clear, TrackButtonClick);
trackLinearLayout = new LinearLayout(this);
trackLinearLayout.Orientation = Orientation.Horizontal;
trackLinearLayout.Visibility = ViewStates.Gone;
trackLinearLayout.AddView(pointButton);
trackLinearLayout.AddView(lineButton);
trackLinearLayout.AddView(rectangleButton);
trackLinearLayout.AddView(polygonButton);
trackLinearLayout.AddView(ellipseButton);
LinearLayout toolsLinearLayout = new LinearLayout(this);
toolsLinearLayout.AddView(cursorButton);
toolsLinearLayout.AddView(drawButton);
toolsLinearLayout.AddView(trackLinearLayout);
toolsLinearLayout.AddView(editButton);
toolsLinearLayout.AddView(clearButton);
InitializeInstruction(toolsLinearLayout);
}
private ImageButton GetButton(int imageResId, EventHandler handler)
{
ImageButton button = new ImageButton(this);
button.Id = imageResId;
button.SetImageResource(imageResId);
button.Click += handler;
button.SetBackgroundResource(Resource.Drawable.buttonbackground);
return button;
}
private IEnumerable GetButtons()
{
yield return editButton;
yield return lineButton;
yield return pointButton;
yield return clearButton;
yield return cursorButton;
yield return circleButton;
yield return polygonButton;
yield return ellipseButton;
yield return rectangleButton;
yield return drawButton;
}
private void TrackButtonClick(object sender, EventArgs e)
{
ImageButton button = (ImageButton)sender;
foreach (ImageButton tempButton in GetButtons())
{
tempButton.SetBackgroundResource(Resource.Drawable.buttonbackground);
}
button.SetBackgroundResource(Resource.Drawable.buttonselectedbackground);
switch (button.Id)
{
case Resource.Drawable.Cursor:
foreach (var item in androidMap.EditOverlay.EditShapesLayer.InternalFeatures)
{
if (!androidMap.TrackOverlay.TrackShapeLayer.InternalFeatures.Contains(item))
{
androidMap.TrackOverlay.TrackShapeLayer.InternalFeatures.Add(item);
}
}
androidMap.TrackOverlay.TrackMode = TrackMode.None;
androidMap.EditOverlay.EditShapesLayer.InternalFeatures.Clear();
androidMap.EditOverlay.ClearAllControlPoints();
trackLinearLayout.Visibility = ViewStates.Gone;
drawButton.Visibility = ViewStates.Visible;
editButton.Visibility = ViewStates.Visible;
clearButton.Visibility = ViewStates.Visible;
androidMap.Refresh();
break;
case Resource.Drawable.Clear:
androidMap.EditOverlay.ClearAllControlPoints();
androidMap.EditOverlay.EditShapesLayer.Open();
androidMap.EditOverlay.EditShapesLayer.Clear();
androidMap.TrackOverlay.TrackShapeLayer.Open();
androidMap.TrackOverlay.TrackShapeLayer.Clear();
androidMap.Refresh();
break;
case Resource.Drawable.Point:
androidMap.TrackOverlay.TrackMode = TrackMode.Point;
break;
case Resource.Drawable.Line:
androidMap.TrackOverlay.TrackMode = TrackMode.Line;
break;
case Resource.Drawable.Rectangle:
androidMap.TrackOverlay.TrackMode = TrackMode.Rectangle;
break;
case Resource.Drawable.Polygon:
androidMap.TrackOverlay.TrackMode = TrackMode.Polygon;
break;
case Resource.Drawable.Circle:
androidMap.TrackOverlay.TrackMode = TrackMode.Circle;
break;
case Resource.Drawable.Ellipse:
androidMap.TrackOverlay.TrackMode = TrackMode.Ellipse;
break;
case Resource.Drawable.Edit:
androidMap.TrackOverlay.TrackMode = TrackMode.None;
foreach (Feature feature in androidMap.TrackOverlay.TrackShapeLayer.InternalFeatures)
{
androidMap.EditOverlay.EditShapesLayer.InternalFeatures.Add(feature);
}
androidMap.TrackOverlay.TrackShapeLayer.InternalFeatures.Clear();
androidMap.EditOverlay.CalculateAllControlPoints();
androidMap.Refresh();
break;
case Resource.Drawable.Draw:
androidMap.TrackOverlay.TrackMode = TrackMode.Point;
trackLinearLayout.Visibility = ViewStates.Visible;
drawButton.Visibility = ViewStates.Gone;
editButton.Visibility = ViewStates.Gone;
clearButton.Visibility = ViewStates.Gone;
pointButton.SetBackgroundResource(Resource.Drawable.buttonselectedbackground);
break;
default:
androidMap.TrackOverlay.TrackMode = TrackMode.None;
break;
}
}
public void InitializeInstruction(params View[] contentViews)
{
contentHeight = 0;
ViewGroup containerView = FindViewById(Resource.Id.MainLayout);
LayoutInflater inflater = LayoutInflater.From(this);
View instructionLayoutView = inflater.Inflate(Resource.Layout.Instruction, containerView);
TextView instructionTextView = instructionLayoutView.FindViewById(Resource.Id.instructionTextView);
TextView descriptionTextView = instructionLayoutView.FindViewById(Resource.Id.descriptionTextView);
descriptionTextView.Text = "Draw and Edit Shapes.";
LinearLayout instructionLayout = instructionLayoutView.FindViewById(Resource.Id.instructionLinearLayout);
LinearLayout contentLayout = instructionLayoutView.FindViewById(Resource.Id.contentLinearLayout);
RelativeLayout headerRelativeLayout = instructionLayoutView.FindViewById(Resource.Id.headerRelativeLayout);
if (contentViews != null)
{
foreach (View view in contentViews)
{
contentLayout.AddView(view);
}
}
headerRelativeLayout.Click += (sender, e) =>
{
contentHeight = contentHeight == 0 ? instructionLayout.Height - instructionTextView.Height : -contentHeight;
instructionLayout.Layout(instructionLayout.Left, instructionLayout.Top + contentHeight, instructionLayout.Right, instructionLayout.Bottom);
};
}
}
}
====AssemblyInfo.cs====
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using Android.App;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("DrawEditFeatures")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("DrawEditFeatures")]
[assembly: AssemblyCopyright("Copyright © 2014")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: ComVisible(false)]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
====Resource.Designer.cs====
#pragma warning disable 1591
//------------------------------------------------------------------------------
//
// This code was generated by a tool.
// Runtime Version:4.0.30319.0
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
//
//------------------------------------------------------------------------------
[assembly: global::Android.Runtime.ResourceDesignerAttribute("DrawEditFeatures.Resource", IsApplication=true)]
namespace DrawEditFeatures
{
[System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "1.0.0.0")]
public partial class Resource
{
static Resource()
{
global::Android.Runtime.ResourceIdManager.UpdateIdValues();
}
public static void UpdateIdValues()
{
global::ThinkGeo.MapSuite.AndroidEdition.Resource.Drawable.icon_mapsuite_default256x256 = global::DrawEditFeatures.Resource.Drawable.icon_mapsuite_default256x256;
global::ThinkGeo.MapSuite.AndroidEdition.Resource.Drawable.icon_mapsuite_default512x512 = global::DrawEditFeatures.Resource.Drawable.icon_mapsuite_default512x512;
global::ThinkGeo.MapSuite.AndroidEdition.Resource.Drawable.icon_mapsuite_globe = global::DrawEditFeatures.Resource.Drawable.icon_mapsuite_globe;
global::ThinkGeo.MapSuite.AndroidEdition.Resource.Drawable.icon_mapsuite_globe_Pressed = global::DrawEditFeatures.Resource.Drawable.icon_mapsuite_globe_Pressed;
global::ThinkGeo.MapSuite.AndroidEdition.Resource.Drawable.icon_mapsuite_Minus = global::DrawEditFeatures.Resource.Drawable.icon_mapsuite_Minus;
global::ThinkGeo.MapSuite.AndroidEdition.Resource.Drawable.icon_mapsuite_Minus_Pressed = global::DrawEditFeatures.Resource.Drawable.icon_mapsuite_Minus_Pressed;
global::ThinkGeo.MapSuite.AndroidEdition.Resource.Drawable.icon_mapsuite_noImageTile = global::DrawEditFeatures.Resource.Drawable.icon_mapsuite_noImageTile;
global::ThinkGeo.MapSuite.AndroidEdition.Resource.Drawable.icon_mapsuite_Plus = global::DrawEditFeatures.Resource.Drawable.icon_mapsuite_Plus;
global::ThinkGeo.MapSuite.AndroidEdition.Resource.Drawable.icon_mapsuite_Plus_Pressed = global::DrawEditFeatures.Resource.Drawable.icon_mapsuite_Plus_Pressed;
}
public partial class Attribute
{
static Attribute()
{
global::Android.Runtime.ResourceIdManager.UpdateIdValues();
}
private Attribute()
{
}
}
public partial class Drawable
{
// aapt resource value: 0x7f020000
public const int buttonbackground = 2130837504;
// aapt resource value: 0x7f020001
public const int buttonselectedbackground = 2130837505;
// aapt resource value: 0x7f020002
public const int Circle = 2130837506;
// aapt resource value: 0x7f020003
public const int Clear = 2130837507;
// aapt resource value: 0x7f020004
public const int Cursor = 2130837508;
// aapt resource value: 0x7f020005
public const int Draw = 2130837509;
// aapt resource value: 0x7f020006
public const int Edit = 2130837510;
// aapt resource value: 0x7f020007
public const int Ellipse = 2130837511;
// aapt resource value: 0x7f020008
public const int Icon = 2130837512;
// aapt resource value: 0x7f020009
public const int icon_mapsuite_default256x256 = 2130837513;
// aapt resource value: 0x7f02000a
public const int icon_mapsuite_default512x512 = 2130837514;
// aapt resource value: 0x7f02000b
public const int icon_mapsuite_globe = 2130837515;
// aapt resource value: 0x7f02000c
public const int icon_mapsuite_globe_Pressed = 2130837516;
// aapt resource value: 0x7f02000d
public const int icon_mapsuite_Minus = 2130837517;
// aapt resource value: 0x7f02000e
public const int icon_mapsuite_Minus_Pressed = 2130837518;
// aapt resource value: 0x7f02000f
public const int icon_mapsuite_noImageTile = 2130837519;
// aapt resource value: 0x7f020010
public const int icon_mapsuite_Plus = 2130837520;
// aapt resource value: 0x7f020011
public const int icon_mapsuite_Plus_Pressed = 2130837521;
// aapt resource value: 0x7f020012
public const int Line = 2130837522;
// aapt resource value: 0x7f020013
public const int Point = 2130837523;
// aapt resource value: 0x7f020014
public const int Polygon = 2130837524;
// aapt resource value: 0x7f020015
public const int Rectangle = 2130837525;
static Drawable()
{
global::Android.Runtime.ResourceIdManager.UpdateIdValues();
}
private Drawable()
{
}
}
public partial class Id
{
// aapt resource value: 0x7f050006
public const int MainLayout = 2131034118;
// aapt resource value: 0x7f050007
public const int androidmap = 2131034119;
// aapt resource value: 0x7f050004
public const int contentLinearLayout = 2131034116;
// aapt resource value: 0x7f050003
public const int contentRelativeLayout = 2131034115;
// aapt resource value: 0x7f050005
public const int descriptionTextView = 2131034117;
// aapt resource value: 0x7f050001
public const int headerRelativeLayout = 2131034113;
// aapt resource value: 0x7f050000
public const int instructionLinearLayout = 2131034112;
// aapt resource value: 0x7f050002
public const int instructionTextView = 2131034114;
static Id()
{
global::Android.Runtime.ResourceIdManager.UpdateIdValues();
}
private Id()
{
}
}
public partial class Layout
{
// aapt resource value: 0x7f030000
public const int Instruction = 2130903040;
// aapt resource value: 0x7f030001
public const int Main = 2130903041;
static Layout()
{
global::Android.Runtime.ResourceIdManager.UpdateIdValues();
}
private Layout()
{
}
}
public partial class String
{
// aapt resource value: 0x7f040001
public const int ApplicationName = 2130968577;
// aapt resource value: 0x7f040000
public const int Hello = 2130968576;
static String()
{
global::Android.Runtime.ResourceIdManager.UpdateIdValues();
}
private String()
{
}
}
}
}
#pragma warning restore 1591