huyong479072052
2011-08-21 11:40
浏览 325

android图片按手势进行移动

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • renpeng301 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]
    
    点赞 打赏 评论
  • iteye_18028 2011-08-22 15:14

    提供你一个思路。

    用一个数组保存手势经过的x,y(began和move事件),当手抬起来后(end),再让精灵图片的坐标按照数组里的值依次改变即可

    点赞 打赏 评论

相关推荐 更多相似问题