正在做一个游戏,其中要用到用手滑动一个路线,手抬起后,人物图片按此路线移动过去。请大家提供点思路、、、
2条回答 默认 最新
- laopeng301 2011-08-22 21:11关注
[url]http://www.yoooo.org/?p=58[/url] :lol:
这个非常的不错啊····
[code="java"] 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(); } @Override public 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); } @Override protected 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(); } } } }[/code]
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 c程序不知道为什么得不到结果
- ¥40 复杂的限制性的商函数处理
- ¥15 程序不包含适用于入口点的静态Main方法
- ¥15 素材场景中光线烘焙后灯光失效
- ¥15 请教一下各位,为什么我这个没有实现模拟点击
- ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
- ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
- ¥20 有关区间dp的问题求解
- ¥15 多电路系统共用电源的串扰问题
- ¥15 slam rangenet++配置