当前位置: 代码迷 >> Android >> ,真不行了,瓦片地图,这个要如何弄才对
  详细解决方案

,真不行了,瓦片地图,这个要如何弄才对

热度:51   发布时间:2016-05-01 21:54:15.0
求助,真不行了,瓦片地图,这个要怎么弄才对?
实在是太蛋疼了,网上找这个方面的东西特别少,也不知道是什么原因。。。我想做一个瓦片地图一样的,可以显示和拖拽,这必然就涉及到显示,重绘,缩放等等一系列的问题,现在很多不会,头绪很少啊。。。来求助了,下面贴出我的画图片的代码和移动图片的代码。我现在只画了四个图片,现在移动时是整个画布都移动了,这样的话根本后面想重绘都没有地方可以重绘了啊,我新手,好多不懂,特意来请教,不知道应该怎么弄啊 ?现在着急怎么重绘图片,我的重绘的意思是图片移动了相应的祖坐标肯定也移动了,那么我重绘的肯定是新的坐标的了,而我的瓦片地图都是固定大小的,要怎么弄才好弄?我意思不知道大家懂不懂。知道的指导下啊~
下面是代码,是我弄的画图和移动的代码,请指导下要达到上面的要求代码应该怎么弄?
画图:
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawColor(Color.WHITE);
Paint paint = new Paint();
paint.setStyle(Style.STROKE); 
canvas.drawRect(new Rect(10, 10, 50, 20), paint); 
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.zuoshang); 
Bitmap bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.zuoxia);
Bitmap bitmap2 = BitmapFactory.decodeResource(getResources(), R.drawable.youshang);
Bitmap bitmap3 = BitmapFactory.decodeResource(getResources(), R.drawable.youxia);
this.DrawImage(canvas, bitmap3, 240 , 400 , bitmap.getWidth(), bitmap.getHeight(), 0 , 0 );
this.DrawImage(canvas, bitmap1, 240 - bitmap1.getWidth() , 400,bitmap1.getWidth(), bitmap1.getHeight(), 0 , 0 );
this.DrawImage(canvas, bitmap, 240 - bitmap.getWidth(), 400 - bitmap.getHeight() ,bitmap2.getWidth(), bitmap2.getHeight(), 0 , 0 );
this.DrawImage(canvas, bitmap2, 240 , 400 - bitmap2.getHeight(), bitmap3.getWidth(), bitmap3.getHeight(), 0 , 0 );
}
/**
* x:屏幕上的x坐标 y:屏幕上的y坐标 w:要绘制的图片的宽度 h:要绘制的图片的高度 bx:图片上的x坐标 by:图片上的y坐标

* @param canvas
* @param mBitmap
* @param x
* @param y
* @param w
* @param h
* @param bx
* @param by
*/
private void DrawImage(Canvas canvas, Bitmap bitmap1, int x, int y,
int w, int h, int bx, int by) {
// TODO Auto-generated method stub
Rect dst = new Rect();// 屏幕裁剪区域 
Rect src = new Rect(); // 图片裁剪区域
src.left = bx;
src.top = by;
src.right = bx + w;
src.bottom = by + h;

dst.left = x;
dst.top = y;
dst.right = x + w;
dst.bottom = y + h;
Paint mPaint = new Paint();
canvas.drawBitmap(bitmap1, src, dst, mPaint);
}

移动的监听和处理:
private OnTouchListener moveEventListener = new OnTouchListener() { 
  int lastX, lastY; 
 
  @Override 
  public boolean onTouch(View v, MotionEvent event) { 
  switch (event.getAction()) { 
  case MotionEvent.ACTION_DOWN: 
  lastX = (int) event.getRawX(); 
  lastY = (int) event.getRawY(); 
  break; 
  case MotionEvent.ACTION_MOVE: 
  int dx = (int) event.getRawX() - lastX; 
  int dy = (int) event.getRawY() - lastY; 
 
  int left = v.getLeft() + dx; 
  int top = v.getTop() + dy; 
  int right = v.getRight() + dx; 
  int bottom = v.getBottom() + dy;
   
  v.layout(left, top, right, bottom); 
  lastX = (int) event.getRawX(); 
  lastY = (int) event.getRawY(); 
   
  break; 
  case MotionEvent.ACTION_UP: 
  break; 
  } 
  return true; 
  } 
  };

------解决方案--------------------
几年前做的啊。都不记得具体代码细节了。只记得思路
1 确定屏幕中心点对应的地理位置坐标
2 确定当前地图比例尺
3 根据当前屏幕中心和当前比例尺可以确定当前屏幕的地理坐标范围
4 把需要展示的地图全部画上屏幕
5 每次移动 实际上就是屏幕中心点对应的地理位置坐标的改变。重复步骤1-4 重绘一下就得到移动的效果了。
  相关解决方案