问题描述
正在做一个游戏,其中要用到用手滑动一个路线,手抬起后,人物图片按此路线移动过去。请大家提供点思路、、、
解决方案
http://www.yoooo.org/?p=58 这个非常的不错啊····class CustomView1 extends View {private Paint paint;private ArrayList<POINTF> graphics = new ArrayList<POINTF>();private Paint lPaint;private Path mPath;private int of = 0;private Boolean over = false;private float mX, mY;private static final float TOUCH_TOLERANCE = 4;public CustomView1(Context context) {super(context);paint = new Paint(Paint.ANTI_ALIAS_FLAG);paint.setColor(Color.RED);paint.setStrokeJoin(Paint.Join.ROUND);paint.setStrokeCap(Paint.Cap.ROUND);paint.setStrokeWidth(65);lPaint = new Paint(Paint.ANTI_ALIAS_FLAG);lPaint.setColor(Color.BLACK);lPaint.setStyle(Paint.Style.STROKE);// 空心lPaint.setStrokeJoin(Paint.Join.ROUND);lPaint.setStrokeCap(Paint.Cap.ROUND);lPaint.setStrokeWidth(5);mPath = new Path();}@Overridepublic boolean onTouchEvent(MotionEvent event) {float x = event.getX();float y = event.getY();switch (event.getAction()) {case MotionEvent.ACTION_DOWN:over = false;graphics.clear();of = 0;graphics.add(new PointF(x, y));touch_start(x, y);invalidate();break;case MotionEvent.ACTION_MOVE:graphics.add(new PointF(x, y));touch_move(x, y);invalidate();break;case MotionEvent.ACTION_UP:over = true;touch_up();invalidate();break;}return true;}private void touch_start(float x, float y) {mPath.reset();mPath.moveTo(x, y);mX = x;mY = y;}private void touch_move(float x, float y) {float dx = Math.abs(x - mX);float dy = Math.abs(y - mY);if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) {mPath.quadTo(mX, mY, (x + mX) / 2, (y + mY) / 2);mX = x;mY = y;}}private void touch_up() {mPath.lineTo(mX, mY);}@Overrideprotected void onDraw(Canvas canvas) {// canvas.drawColor(Color.TRANSPARENT,Mode.CLEAR);canvas.drawColor(Color.WHITE);// 清理canvas.drawPath(mPath, lPaint);if (over && graphics.size() > 0) {canvas.drawPoint(graphics.get(of).x, graphics.get(of).y, paint);of += 1;if (of < graphics.size()) {if (of == graphics.size() - 1) {mPath.reset();// 移动完成后移除线条}invalidate();}}} }
解决方案二:
提供你一个思路。用一个数组保存手势经过的x,y(began和move事件),当手抬起来后(end),再让精灵图片的坐标按照数组里的值依次改变即可