当前位置: 首页 > news >正文

手机版微网站网站原型设计和版式设计

手机版微网站,网站原型设计和版式设计,网站怎么在百度做推广方案,自己电脑做网站服务器设置Osmdroid 天地图 #xff08;二#xff09; 前言正文一、定位监听二、改变地图中心三、添加Marker四、地图点击五、其他配置① 缩放控件② Marker更换图标③ 添加比例尺④ 添加指南针⑤ 添加经纬度网格线⑥ 启用旋转手势⑦ 添加小地图 六、源码 前言 上一篇中我们显示了地图… Osmdroid 天地图 二 前言正文一、定位监听二、改变地图中心三、添加Marker四、地图点击五、其他配置① 缩放控件② Marker更换图标③ 添加比例尺④ 添加指南针⑤ 添加经纬度网格线⑥ 启用旋转手势⑦ 添加小地图 六、源码 前言 上一篇中我们显示了地图但是还不够不满足基本的使用情况本篇中继续进行功能使用上的完善。 正文 本文中要实现定位和地图的交互功能还有一些体验上的功能首先我们先实现定位功能意思就是一打开地图就定位到当前所在的位置。 一、定位监听 Android实际上有自带的定位监听位置准不准两说起码是有的下面我们来使用一下在MainActivity中增加如下代码 private val TAG MainActivity// 是否定位private var isLocation false// 定位管理器private lateinit var locationManager: LocationManager一个用于打印、一个用于控制是否定位locationManager我们就在onCreate()函数中进行实例化如下所示 // 创建位置管理器实例locationManager getSystemService(Context.LOCATION_SERVICE) as LocationManager代码位置如下图所示 然后实现一个Android原生的定位监听代码如下所示 private val locationListener LocationListener { location - // 处理位置变化val latitude location.latitudeval longitude location.longitudeLog.d(TAG, onLocationChanged: $latitude, $longitude)}然后我们可以写一个开始和停止定位的函数代码如下所示 private var isLocation falseprivate fun startLocation() {if (!isLocation){// 注册位置监听器locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0f, locationListener)isLocation !isLocation}}private fun stopLocation() {if (isLocation) {// 停止位置更新locationManager.removeUpdates(locationListener)isLocation !isLocation}}你可能会发现这行locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0f, locationListener)代码报错我们看看源码是怎么样的 这里告诉我们调用这个方法需要在请求了定位权限之后否则就会闪退不信你可以试试看而我们现在明显已经是获取了权限了那么我们也可以增加一个注解点击这一行Alt Enter出现弹窗。 选择标注的这一项则会在方法上方添加一个注解SuppressLint(MissingPermission)这并不是最好的方式但是省事只要你满足那个前提那就不会有问题最后我们在initMap()函数中调用startLocation()如下图所示 同时我们在定位监听回调中调用stopLocation()如下图所示 下面我们运行一下看看是否会触发定位看看控制台是否会打印经纬度。 打印了出来这证明定位监听是有效的下面我们需要改变地图中心。 二、改变地图中心 在MainActivity中增加一个函数代码如下所示 /*** 修改地图中心点*/private fun changeMapCenter(geoPoint: GeoPoint) {Log.d(TAG, changeMapCenter: $geoPoint)binding.mapView.apply {controller.apply {setZoom(14.0)setCenter(geoPoint)}}}当调用changeMapCenter时打印一下然后通过地图控制器修改缩放比例和地图中心接下来就在定位监听中回调中调用changeMapCenter()如下图所示 下面运行一下注意定位可能会有点慢请耐心等待只要定位成功了地图肯定会改变的我们通过日志确认一下 虽然我们改变了地图中心但是没有标识都不知道是哪里下面就添加一个Marker。 三、添加Marker 首先在MainActivity中声明一个变量 // 标记private var mMarker: Marker? null然后我们修改changeMapCenter()函数添加代码如下所示 if (mMarker ! null) {overlays.remove(mMarker)}mMarker Marker(this).apply {title Markerposition geoPoint}// 添加标点overlays.add(mMarker)添加位置如下图所示 此时你再运行一下就能看到一个标点了我就不贴图了容易暴露位置被Gank。 四、地图点击 下面我们来做一个地图点击事件地图点击是在OverlayManager上完成的我们回到initMap()函数增加如下代码 // 覆盖管理器配置overlayManager.apply {tilesOverlay.isEnabled trueadd(object : Overlay() {override fun onSingleTapConfirmed(e: MotionEvent?, mapView: MapView?): Boolean {Log.d(TAG, onSingleTapConfirmed)return super.onSingleTapConfirmed(e, mapView)}})}添加位置如下图所示 从上述代码来看我们启用地图上的图块叠加层并添加一个新的叠加层该叠加层在单击时打印日志下面运行一下随便点击看看控制台是否有日志打印。 出现了日志说明点击有效果实际上还有一个方法如下所示 override fun onSingleTapUp(e: MotionEvent?, mapView: MapView?): Boolean {Log.d(TAG, onSingleTapUp)return super.onSingleTapUp(e, mapView)}这个函数也是单击只不过我在测试的时候同时打印时发现每次点击这两个都会触发而onSingleTapConfirmed()是最后触发的所以就用onSingleTapConfirmed()了。现在点击生效之后我们需要在点击之后改变地图位置那么就可以调用changeMapCenter()函数但是它需要传入一个GeoPoint对象因此我们需要通过mapView去得到这个对象所需要的值也就是经纬度下面我们在onSingleTapConfirmed()回调中增加如下所示代码 // 获取投影对象后进行坐标转换再切换地图中心位置mapView?.projection?.let { proj -val geoPoint proj.fromPixels(e!!.x.toInt(), e.y.toInt()) as GeoPointLog.d(TAG, onSingleTapConfirmed: 切换地图中心位置)changeMapCenter(geoPoint)}添加位置如下图所示 这段代码的含义通过上面的注释应该都清楚了再通俗一点就是点击屏幕的像素进行xy坐标的转换下面再运行一下看看会怎么样 看到这个日志地图就已经切换成功了。 五、其他配置 地图上还有一些其他的配置比如我们可以显示缩放控件。 ① 缩放控件 通过zoomController去控制显示的状态。 zoomController.setVisibility(Visibility.SHOW_AND_FADEOUT)比如这里我们设置为SHOW_AND_FADEOUT就是淡入淡出当你点击触摸屏幕时就会在底部出现不触摸屏幕3.5s后控件消失还有两个属性是ALWAYS, NEVER很好理解就是总是显示和从不显示的意思我们之前的代码中是设置从不显示的你可以改成SHOW_AND_FADEOUT。 ② Marker更换图标 我们可以通过marker的属性去更改图标首先我们画一个图标在drawable下新建一个ic_marker.xml文件代码如下所示 vector xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:width48dpandroid:height48dpandroid:tint#5AD3E5android:viewportWidth24android:viewportHeight24pathandroid:fillColorandroid:color/whiteandroid:pathDataM12,2L12,2C8.13,2 5,5.13 5,9c0,1.74 0.5,3.37 1.41,4.84c0.95,1.54 2.2,2.86 3.16,4.4c0.47,0.75 0.81,1.45 1.17,2.26C11,21.05 11.21,22 12,22h0c0.79,0 1,-0.95 1.25,-1.5c0.37,-0.81 0.7,-1.51 1.17,-2.26c0.96,-1.53 2.21,-2.85 3.16,-4.4C18.5,12.37 19,10.74 19,9C19,5.13 15.87,2 12,2zM12,11.75c-1.38,0 -2.5,-1.12 -2.5,-2.5s1.12,-2.5 2.5,-2.5s2.5,1.12 2.5,2.5S13.38,11.75 12,11.75z //vector然后通过一行代码去设置如下所示 icon ContextCompat.getDrawable(thisMainActivity, R.drawable.ic_marker)位置如下图所示 这样我们就替换掉了默认的那个Marker图标。 ③ 添加比例尺 在地图上添加比例尺在initMap()中添加代码如下所示 add(ScaleBarOverlay(binding.mapView).apply {setAlignBottom(true) // 底部对齐setScaleBarOffset(100, 10) // 设置偏移量})添加位置如下图所示 这里的setAlignBottom()设置显示在屏幕底部还有两个方法setCentred()、setAlignRight()根据方法名可以知道是什么意思自行测试。 ④ 添加指南针 添加指南针 // 添加指南针add(CompassOverlay(thisMainActivity, binding.mapView).apply {enableCompass()}) 添加位置如下图所示 ⑤ 添加经纬度网格线 添加 显示纬度/经度网格线 // 添加经纬度网格线add(LatLonGridlineOverlay2())添加位置如下图所示 ⑥ 启用旋转手势 启用旋转手势需要配置地图和增加叠加层地图上设置 setMultiTouchControls(true)添加叠加层 // 启用旋转手势add(RotationGestureOverlay(binding.mapView).apply { isEnabled true })添加位置如下图所示 ⑦ 添加小地图 通过小地图叠加层添加根据屏幕的宽高 / 4设置小地图的宽高并且设置小地图瓦片资源代码如下所示 add(MinimapOverlay(thisMainActivity, binding.mapView.tileRequestCompleteHandler).apply {val dm resources.displayMetricswidth dm.widthPixels / 4height dm.heightPixels / 4// 设置小地图资源setTileSource(Config.TDTCIA_W)})添加位置如下图所示 运行效果如下图所示 六、源码 如果对你有所帮助的话不妨欢迎Star和Fork。 源码地址OpenMap APK下载地址OpenMap1.0.apk
http://www.hkea.cn/news/14562654/

相关文章:

  • 搭建自己的博客网站深圳 建网站
  • 网站回答问题app怎么做php 如何在网站根目录创建文件夹
  • 购物网站后台管理系统如何查企业的工商信息
  • 怎么建设国字形网站做教学的视频网站
  • wordpress 增加直达连接嘉兴seo优化
  • 合肥网站制作公司电话做微信的微网站费用多少
  • 网站建设报价清单网站建设栏目层级
  • 谁做广东11彩票网站上海松江区网站建设
  • 新手建设网站步骤wordpress 不同侧边栏
  • 电子商务网站建设与管理总结网站建设预算方案
  • 一般找人做网站多少钱雄安网站建设单位
  • 网站首页设计报价湘潭网站设计外包公司
  • 伊利网站建设评价现货市场交易平台
  • 怎样创建网站流程工厂视频网站建设
  • 石家庄网站建设 河北供求网合肥app外包公司
  • 可信赖的武进网站建设定制一个软件要多少钱
  • 网站建设开发技术类型忻州网站建设求职简历
  • 做丝网网站哪个好芜湖做网站需要多少钱
  • 无锡哪里有做网站的公司网页制作怎么把图片放进去
  • 公司建站方案做网站卖
  • 建设官方网站心理服务网站建设内容
  • 网站的主题有哪些做视频网站需要多大的带宽
  • 电子商务网站建设方案案例淄博品质网站建设
  • 如何在微信平台做购买网站淮北市建设工程信息网
  • 网站放自己服务器备案wordpress调用文章部分内容
  • 域名注册的网站上海好公司排名前十
  • 网站建设与开发选题网站一键提交收录
  • 西安大兴医院网站建设北京网站建设app开发
  • 网站源码 和网站模板区别做素材网站服务器
  • 哪网站建设wordpress权限设置管理