zoukankan      html  css  js  c++  java
  • 【Android】3.18 示例18--自定义绘制功能

    分类:C#、Android、VS2015、百度地图应用; 创建日期:2016-02-04

    简介:介绍自定义绘制点、线、多边形、圆等几何图形和文字

    详述:

    (1)支持绘制凸多边形,如要绘制凹多边形请用三角形进行拼接;

    (2)支持绘制文字;

    一、运行截图

    本示例运行截图如下:

    image

    二、设计步骤

    1、添加Demo18_geometry.xml文件

    在layout文件夹下添加该文件,然后将代码改为下面的内容:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >
    
      <LinearLayout
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:orientation="horizontal" >
        <CheckBox
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1.0"
            android:checked="false"
            android:text="虚线绘制"
            android:id="@+id/dottedline" />
    
        <Button
            android:id="@+id/btnReset"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_marginBottom="10dip"
            android:layout_marginLeft="10dip"
            android:layout_marginRight="10dip"
            android:layout_marginTop="10dip"
            android:layout_weight="1.0"
            android:text="绘制" />
    
        <Button
              android:id="@+id/btnClear"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:layout_marginBottom="10dip"
              android:layout_marginLeft="10dip"
              android:layout_marginRight="10dip"
              android:layout_marginTop="10dip"
              android:layout_weight="1.0"
              android:text="清除" />
      </LinearLayout>
    
      <com.baidu.mapapi.map.TextureMapView
          android:id="@+id/bmapView"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:clickable="true" />
    
    </LinearLayout>

    2、添加Demo18Geometry.cs文件

    在SrcSdkDemos文件夹下添加该文件,然后将其内容改为下面的代码:

    using System.Collections.Generic;
    using Android.App;
    using Android.Content.PM;
    using Android.OS;
    using Android.Graphics;
    using Android.Widget;
    using Com.Baidu.Mapapi.Map;
    using Com.Baidu.Mapapi.Model;
    using Java.Lang;
    namespace BdMapV371Demos.SrcSdkDemos
    {
        /// <summary>
        /// 此demo用来展示如何在地图上用GraphicsOverlay添加点、线、多边形、圆,同时展示如何在地图上用TextOverlay添加文字
        /// </summary>
        [Activity(Label = "@string/demo_name_geometry",
            ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.KeyboardHidden,
             ScreenOrientation = ScreenOrientation.Sensor)]
        public class Demo18Geometry : Activity
        {
            TextureMapView mMapView;
            BaiduMap mBaiduMap;
            Polyline mPolyline;
            Polyline mColorfulPolyline;
            Polyline mTexturePolyline;
            BitmapDescriptor mRedTexture = BitmapDescriptorFactory.FromAsset("icon1_road_red_arrow.png");
            BitmapDescriptor mBlueTexture = BitmapDescriptorFactory.FromAsset("icon1_road_blue_arrow.png");
            BitmapDescriptor mGreenTexture = BitmapDescriptorFactory.FromAsset("icon1_road_green_arrow.png");
    
            protected override void OnCreate(Bundle savedInstanceState)
            {
                base.OnCreate(savedInstanceState);
                SetContentView(Resource.Layout.demo18_geometry);
    
                // 初始化地图
                mMapView = FindViewById<TextureMapView>(Resource.Id.bmapView);
                mBaiduMap = mMapView.Map;
    
                // UI初始化
                Button resetBtn = FindViewById<Button>(Resource.Id.btnReset);
                resetBtn.Click += delegate
                {
                    // 添加绘制元素
                    AddCustomElementsDemo();
                };
                Button clearBtn = FindViewById<Button>(Resource.Id.btnClear);
                clearBtn.Click += delegate
                {
                    // 清除所有图层
                    mMapView.Map.Clear();
                };
                CheckBox dottedline = FindViewById<CheckBox>(Resource.Id.dottedline);
                dottedline.CheckedChange += delegate
                {
                    if (mPolyline == null) return;
                    if (dottedline.Checked) mPolyline.DottedLine = true;
                    else mPolyline.DottedLine = false;
                };
            }
    
            /// <summary>
            /// 添加点、线、多边形、圆、文字
            /// </summary>
            public void AddCustomElementsDemo()
            {
                // 添加普通折线绘制
                LatLng p1 = new LatLng(39.97923, 116.357428);
                LatLng p2 = new LatLng(39.94923, 116.397428);
                LatLng p3 = new LatLng(39.97923, 116.437428);
                IList<LatLng> points = new List<LatLng>();
                points.Add(p1);
                points.Add(p2);
                points.Add(p3);
                OverlayOptions ooPolyline = new PolylineOptions()
                    .InvokeWidth(10)
                    .InvokeColor(Color.ParseColor("#AAFF0000").ToArgb())
                    .InvokePoints(points);
                mPolyline = (Polyline)mBaiduMap.AddOverlay(ooPolyline);
    
                // 添加多颜色分段的折线绘制
                LatLng p11 = new LatLng(39.965, 116.444);
                LatLng p21 = new LatLng(39.925, 116.494);
                LatLng p31 = new LatLng(39.955, 116.534);
                LatLng p41 = new LatLng(39.905, 116.594);
                LatLng p51 = new LatLng(39.965, 116.644);
                IList<LatLng> points1 = new List<LatLng>();
                points1.Add(p11);
                points1.Add(p21);
                points1.Add(p31);
                points1.Add(p41);
                points1.Add(p51);
                IList<Integer> colorValue = new List<Integer>();
                colorValue.Add(Integer.ValueOf(Color.ParseColor("#AAFF0000").ToArgb()));
                colorValue.Add(Integer.ValueOf(Color.ParseColor("#AA00FF00").ToArgb()));
                colorValue.Add(Integer.ValueOf(Color.ParseColor("#AA0000FF").ToArgb()));
                OverlayOptions ooPolyline1 = new PolylineOptions()
                    .InvokeWidth(10)
                    .InvokeColor(Color.ParseColor("#AAFF0000").ToArgb())
                    .InvokePoints(points1)
                    .ColorsValues(colorValue);
                mColorfulPolyline = (Polyline)mBaiduMap.AddOverlay(ooPolyline1);
    
                // 添加多纹理分段的折线绘制
                LatLng p111 = new LatLng(39.865, 116.444);
                LatLng p211 = new LatLng(39.825, 116.494);
                LatLng p311 = new LatLng(39.855, 116.534);
                LatLng p411 = new LatLng(39.805, 116.594);
                IList<LatLng> points11 = new List<LatLng>();
                points11.Add(p111);
                points11.Add(p211);
                points11.Add(p311);
                points11.Add(p411);
                IList<BitmapDescriptor> textureList = new List<BitmapDescriptor>();
                textureList.Add(mRedTexture);
                textureList.Add(mBlueTexture);
                textureList.Add(mGreenTexture);
                IList<Integer> textureIndexs = new List<Integer>();
                textureIndexs.Add(Integer.ValueOf(0));
                textureIndexs.Add(Integer.ValueOf(1));
                textureIndexs.Add(Integer.ValueOf(2));
                OverlayOptions ooPolyline11 = new PolylineOptions()
                    .InvokeWidth(20)
                    .InvokePoints(points11)
                    .DottedLine(true)
                    .InvokeCustomTextureList(textureList)
                    .TextureIndex(textureIndexs);
                mTexturePolyline = (Polyline)mBaiduMap.AddOverlay(ooPolyline11);
    
                // 添加弧线
                OverlayOptions ooArc = new ArcOptions()
                    .InvokeColor(Color.ParseColor("#AA00FF00").ToArgb())
                    .InvokeWidth(4)
                    .Points(p1, p2, p3);
                mBaiduMap.AddOverlay(ooArc);
    
                // 添加圆
                LatLng llCircle = new LatLng(39.90923, 116.447428);
                OverlayOptions overlayCircle = new CircleOptions()
                    .InvokeFillColor(0x000000FF)
                    .InvokeCenter(llCircle)
                    .InvokeStroke(new Stroke(15, Color.ParseColor("#AA000000").ToArgb()))
                    .InvokeRadius(12400);
                mBaiduMap.AddOverlay(overlayCircle);
    
                LatLng llDot = new LatLng(39.98923, 116.397428);
                OverlayOptions ooDot = new DotOptions()
                    .InvokeCenter(llDot)
                    .InvokeRadius(16)
                    .InvokeColor(Color.ParseColor("#FF0000FF").ToArgb());
                mBaiduMap.AddOverlay(ooDot);
    
                // 添加多边形
                LatLng pt1 = new LatLng(39.93923, 116.357428);
                LatLng pt2 = new LatLng(39.91923, 116.327428);
                LatLng pt3 = new LatLng(39.89923, 116.347428);
                LatLng pt4 = new LatLng(39.89923, 116.367428);
                LatLng pt5 = new LatLng(39.91923, 116.387428);
                IList<LatLng> pts = new List<LatLng>();
                pts.Add(pt1);
                pts.Add(pt2);
                pts.Add(pt3);
                pts.Add(pt4);
                pts.Add(pt5);
                OverlayOptions polygon = new PolygonOptions()
                    .InvokePoints(pts)
                    .InvokeStroke(new Stroke(15, Color.ParseColor("#AA00FF00").ToArgb()))
                    .InvokeFillColor(Color.ParseColor("#AAFFFF00").ToArgb());
                mBaiduMap.AddOverlay(polygon);
    
                // 添加文字
                LatLng t = new LatLng(39.86923, 116.397428);
                OverlayOptions t1 = new TextOptions()
                    .InvokeBgColor(Color.ParseColor("#AAFFFF00").ToArgb())
                    .InvokeFontSize(54)
                    .InvokeFontColor(Color.ParseColor("#FFFF00FF").ToArgb())
                    .InvokeText("百度地图SDK")
                    .InvokeRotate(-30)
                    .InvokePosition(t);
                mBaiduMap.AddOverlay(t1);
            }
    
            protected override void OnPause()
            {
                mMapView.OnPause();
                base.OnPause();
            }
    
            protected override void OnResume()
            {
                mMapView.OnResume();
                base.OnResume();
            }
    
            protected override void OnDestroy()
            {
                mMapView.OnDestroy();
                mRedTexture.Recycle();
                mBlueTexture.Recycle();
                mGreenTexture.Recycle();
                base.OnDestroy();
            }
    
        }
    }

    3、修改MainActivity.cs

    在MainActivity.cs文件的demos字段定义中,去掉【示例18】下面的注释。

    运行观察结果。

  • 相关阅读:
    P1121 环状最大两段子段和
    无题
    cdoj 1485 柱爷搞子串 sam treap
    自然数幂和
    Gym 100341C AVL Trees NTT
    线性筛分解质因子
    codeforces 366 Ant Man dp
    UVALive 6914 Maze Mayhem 轮廓线dp
    hdu 5790 Prefix 字典树 主席树
    莫比乌斯反演个人小结
  • 原文地址:https://www.cnblogs.com/rainmj/p/5181742.html
Copyright © 2011-2022 走看看