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】下面的注释。

    运行观察结果。

  • 相关阅读:
    高性能分布式计算与存储系统设计概要
    .NET核心代码保护策略
    Web 通信 之 长连接、长轮询(long polling)
    C++数据结构之二叉查找树(BST)
    T4:T4 笔记 + Trait 示例
    腾讯2014软件开发
    CSS选择器从右向左的匹配规则
    Js面向对象编程
    Js杂谈-正则的测试与回溯次数
    Microsoft Message Analyzer (微软消息分析器,“网络抓包工具
  • 原文地址:https://www.cnblogs.com/rainmj/p/5181742.html
Copyright © 2011-2022 走看看