正在做一个游戏,其中要用到用手滑动一个路线,手抬起后,人物图片按此路线移动过去。请大家提供点思路、、、
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 metadata提取的PDF元数据,如何转换为一个Excel
- ¥15 关于arduino编程toCharArray()函数的使用
- ¥100 vc++混合CEF采用CLR方式编译报错
- ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
- ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
- ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
- ¥50 如何openEuler 22.03上安装配置drbd
- ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
- ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
- ¥15 Windows11, backspace, enter, space键失灵