huyong479072052 2011-08-21 11:40
浏览 336
已采纳

android图片按手势进行移动

正在做一个游戏,其中要用到用手滑动一个路线,手抬起后,人物图片按此路线移动过去。请大家提供点思路、、、

  • 写回答

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 &gt;= TOUCH_TOLERANCE || dy &gt;= 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 &amp;&amp; graphics.size() &gt; 0) {
                canvas.drawPoint(graphics.get(of).x, graphics.get(of).y, paint);
                of += 1;
                if (of &lt; graphics.size()) {
                    if (of == graphics.size() - 1) {
                        mPath.reset();// 移动完成后移除线条
                    }
                    invalidate();
                }
            }
        }
        }[/code]
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置