实在是太蛋疼了,网上找这个方面的东西特别少,也不知道是什么原因我想做一个瓦片地图一样的,可以显示和拖拽,这必然就涉及到显示,重绘,缩放等等一系列的问题,现在很多不会,头绪很少啊来求助了,下面贴出我的画图片的代码和移动图片的代码。我现在只画了四个图片,现在移动时是整个画布都移动了,这样的话根本后面想重绘都没有地方可以重绘了啊,我新手,好多不懂,特意来请教,不知道应该怎么弄啊 ?现在着急怎么重绘图片,我的重绘的意思是图片移动了相应的祖坐标肯定也移动了,那么我重绘的肯定是新的坐标的了,而我的瓦片地图都是固定大小的,要怎么弄才好弄?我意思不知道大家懂不懂。知道的指导下啊~
下面是代码,是我弄的画图和移动的代码,请指导下要达到上面的要求代码应该怎么弄?
画图:
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;
}
};
下面是代码,是我弄的画图和移动的代码,请指导下要达到上面的要求代码应该怎么弄?
画图:
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;
}
};
解决方案 »
- code.google.com里面的源码怎么下载
- 能不能再模拟器的设置里面存储管理里打开模拟器的SD卡?
- 求翻译.。。。。。。。
- listview里的imagebutton点击问题
- UIM卡中如何增加一个EF来存储自己的信息
- 为什么HttpURLConnection连接jsp文件在eclipse成功,在MyEclipse失败
- 为什么我每次在Eclipse中点运行,都会新启动一个模拟器?
- Button悬浮在View上
- Androidannotation 的问题
- 单击Android Studio的新建项目没有反应,其它都有反应。sdk 配置哪里是灰色的。
- ContextMenu的HeaderTitle怎么才能单行显示?
- 如何开个新线程
移动:你的地图坐标和屏幕坐标要有个对应的mapping。映射,这样才能移动准确。
放大 缩小:重新请求地图瓦片即可(对于栅格图片)如果你们的地图数据是矢量的。放大缩小会不一样。总体思维不会错