实在是太蛋疼了,网上找这个方面的东西特别少,也不知道是什么原因我想做一个瓦片地图一样的,可以显示和拖拽,这必然就涉及到显示,重绘,缩放等等一系列的问题,现在很多不会,头绪很少啊来求助了,下面贴出我的画图片的代码和移动图片的代码。我现在只画了四个图片,现在移动时是整个画布都移动了,这样的话根本后面想重绘都没有地方可以重绘了啊,我新手,好多不懂,特意来请教,不知道应该怎么弄啊 ?现在着急怎么重绘图片,我的重绘的意思是图片移动了相应的祖坐标肯定也移动了,那么我重绘的肯定是新的坐标的了,而我的瓦片地图都是固定大小的,要怎么弄才好弄?我意思不知道大家懂不懂。知道的指导下啊~
下面是代码,是我弄的画图和移动的代码,请指导下要达到上面的要求代码应该怎么弄?
画图:
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.   

    大概看了下。我以前做过客户端的瓦片地图。具体思路是。地图瓦片是栅格图。你的确是矢量图。换成栅格图会容易点。
    移动:你的地图坐标和屏幕坐标要有个对应的mapping。映射,这样才能移动准确。
    放大 缩小:重新请求地图瓦片即可(对于栅格图片)如果你们的地图数据是矢量的。放大缩小会不一样。总体思维不会错
      

  2.   

    大哥,没看到代码啊,就看到你给我的中文思路啊,难道大哥你发错了?还是我理解错了,中文思路就是您说的代码对了,大哥,现在主要是移动的问题,您说的这个思路我还是有的。主要是这个显示的问题。http://topic.csdn.net/u/20120312/10/41f02244-2db3-4ef0-a8e4-117fc7d2e510.html您看看?