地图的平移、缩放的实现(android版)
一、平移地圖
移動地圖的原理是利用手指在屏幕上拖動的距離,轉換為在地圖上距離,把地圖坐標加上偏移的距離實現地圖移動。
由于地圖是繪制到Bitmap上的,所以地圖移動和縮放的過程只要改變Bitmap的矩陣即可,待移動和縮放完成后,再根據新的地圖范圍重新渲染地圖。
地圖移動過程的關鍵代碼:
offsetX=newX-lastX
offsetY=newY-lastY
matrix.postTranslate(offsetX, offsetY)
canvas.drawBitmap(Bitmap,matrix,paint)
?
移動完成后重新計算地圖范圍的關鍵代碼:
1、計算偏移值
offsetX=newX-startX
offsetY=newY- startY
offsetMapX= offsetX*resolution
offsetMapY= offsetY*resolution
2、重新計算坐標
minX = mapExtent.getMinX()-offsetMapX
minY = mapExtent.getMinY()+offsetMapY
maxX = mapExtent.getMaxX()-offsetMapX
maxY = mapExtent.getMaxY()+offsetMapY
二、縮放地圖
地圖縮放的原理是利用兩指在屏幕上滑動時,兩指之間的距離變化比值進行縮放地圖,地圖縮放時,兩指之間的中心點保持坐標不變。
地圖縮放時的關鍵代碼:
newDis=Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))?? //計算兩指之間的距離
scale=newDis/lastDis?????????????????????????????????????????????????? //兩指在點擊屏幕到離開屏幕時的距離比
matrix.postScale(scale, scale, this.startX, this.startY);
canvas.drawBitmap(Bitmap,matrix,paint)
三、在android下觸發的事件
由于地圖的平移和縮放是用手指完成的,所以對地圖進行平移和縮放都是在用于繪制地圖的view上的onTouchEvent事件里面完成,下面是這個事件的代碼(其他代碼就不公開了):
public boolean onTouchEvent(MotionEvent motionEvent){int x1=(int) motionEvent.getX(0);int y1 =(int)motionEvent.getY(0);int x2=-1;int y2=-1;if (motionEvent.getPointerCount() == 1) { //平移if(isZoom==true){return;}switch (motionEvent.getAction()) {case MotionEvent.ACTION_DOWN:isTouching=true;matrix=new Matrix();this.pointerPressed(x1, y1, x2, y2);break;case MotionEvent.ACTION_UP:this.isRefreshMap=false;this.pointerReleased(x1, y1, x2, y2);isTouching=false;break;case MotionEvent.ACTION_MOVE:this.pointerDragged(x1, y1, x2, y2);break;}} else if (motionEvent.getPointerCount() == 2) { //縮放isZoom=true;this.x=-1;this.y=-1;x2=(int)motionEvent.getX(1);y2=(int)motionEvent.getY(1);if(motionEvent.getAction() != MotionEvent.ACTION_MOVE){if(this.lastDis<0){isTouching=true;matrix=new Matrix();this.startZoom(x1, y1, x2, y2);}else{this.isRefreshMap=false;this.endZoom(x1, y1, x2, y2);isZoom=false;isTouching=false;}}else{this.touchZoom(x1, y1, x2, y2);}} }?
轉載于:https://www.cnblogs.com/gdguansun/p/4793097.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的地图的平移、缩放的实现(android版)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: $arr[]=$v 把 $v 这
- 下一篇: 0909关于操作系统