【Android】第3章(25)示例24--OpenGL绘制功能
程序员文章站
2022-05-21 22:26:48
...
分类:C#、Android、VS2015、百度地图应用; 创建日期:2016-02-04 一、简介 百度地图SDK为广大开发者开放了OpenGL绘制接口,帮助开发者在地图上实现更灵活的样式绘制,丰富地图使用效果体验。 二、运行截图 简介:介绍如何使用OpenGL在地图上实现自定义绘制
分类:C#、Android、VS2015、百度地图应用; 创建日期:2016-02-04
一、简介
百度地图SDK为广大开发者开放了OpenGL绘制接口,帮助开发者在地图上实现更灵活的样式绘制,丰富地图使用效果体验。
二、运行截图
简介:介绍如何使用OpenGL在地图上实现自定义绘制。
详述:
(1)利用OpenGL绘制基本折线;
(2)利用OpenGL在地图上进行纹理绘制;
本示例运行截图如下:
三、设计步骤
1、添加demo24_opengl.xml文件
在layout文件夹下添加该文件,然后将代码改为下面的内容:
xml version="1.0" encoding="utf-8"?> RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > com.baidu.mapapi.map.TextureMapView android:id="@+id/bmapView" android:layout_width="match_parent" android:layout_height="fill_parent" /> RelativeLayout>
2、添加Demo24OpenGL.cs文件
在SrcSdkDemos文件夹下添加该文件,然后将代码改为下面的内容:
using Android.App; using Android.OS; using Com.Baidu.Mapapi.Map; using Com.Baidu.Mapapi.Model; using Android.Graphics; using Android.Util; using System.Collections.Generic; using javax.Microedition.Khronos.Opengles; using Java.Nio; using Android.Opengl; namespace BdMapV371Demos.SrcSdkDemos { ////// 此demo用来展示如何在地图绘制的每帧中再额外绘制一些用户自己的内容 /// [Activity(Label = "@string/demo_name_opengl")] public class Demo24OpenGL : Activity, BaiduMap.IOnMapDrawFrameCallback { // 地图相关 PRivate TextureMapView mMapView; private BaiduMap mBaiduMap; private Bitmap bitmap; private LatLng latlng1 = new LatLng(39.97923, 116.357428); private LatLng latlng2 = new LatLng(39.94923, 116.397428); private LatLng latlng3 = new LatLng(39.96923, 116.437428); private IList latLngPolygon; private float[] vertexs; private FloatBuffer vertexBuffer; private int textureId = -1; private readonly string LTAG = "Demo24OpenGL"; protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); SetContentView(Resource.Layout.demo24_opengl); mMapView = FindViewById (Resource.Id.bmapView); mBaiduMap = mMapView.Map; latLngPolygon = new List () { latlng1,latlng2,latlng3 }; mBaiduMap.SetOnMapDrawFrameCallback(this); bitmap = BitmapFactory.DecodeResource(Resources, Resource.Drawable.ground_overlay); } protected override void OnPause() { mMapView.OnPause(); base.OnPause(); } protected override void OnResume() { mMapView.OnResume(); textureId = -1; base.OnResume(); } protected override void OnDestroy() { mMapView.OnDestroy(); base.OnDestroy(); } public void OnMapDrawFrame(IGL10 gl, MapStatus drawingMapStatus) { if (mBaiduMap.Projection != null) { calPolylinePoint(drawingMapStatus); drawPolyline(gl, Color.Argb(255, 255, 0, 0), vertexBuffer, 10, 3, drawingMapStatus); drawTexture(gl, bitmap, drawingMapStatus); } } public void calPolylinePoint(MapStatus mspStatus) { PointF[] polyPoints = new PointF[latLngPolygon.Count]; vertexs = new float[3 * latLngPolygon.Count]; int i = 0; foreach (LatLng xy in latLngPolygon) { polyPoints[i] = mBaiduMap.Projection.ToOpenGLLocation(xy, mspStatus); vertexs[i * 3] = polyPoints[i].X; vertexs[i * 3 + 1] = polyPoints[i].Y; vertexs[i * 3 + 2] = 0.0f; i++; } for (int j = 0; j ) { Log.Debug(LTAG,
上一篇: 请问PHP用正则表达式,下面这种情况?
下一篇: 一台Linux服务器启动多个数据实例