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

解决方案 »

  1.   

    - -,
    首先你得重写onTouchEvent是必须的然后使用一个
    定义private ArrayList<PointF> pinfs = new ArrayList<PointF>();来存所以的点
    在onTouchEvent中
      
    switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                     pinfs.add(new PointF(event.getX(),event.getY()));
                        break;
                    case MotionEvent.ACTION_MOVE:
                       pinfs.add(new PointF(event.getX(),event.getY()));
                        break;
                    case MotionEvent.ACTION_UP:
                        invalidate();
                        break;
                }然后在    @Override
            protected void onDraw(Canvas canvas) {
                for (PointF point : pinfs) {
                  这里绘制人物移动
                }
     
            }大概应该是这样。。没实验。。待会在试 = =。!
      

  2.   

    额。
    今天实现了下http://www.yoooo.org/?p=58
      

  3.   

    = =! 居然被推荐了
    源码放过来 方便大家看 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();
                 }
             }
            }
        }
      

  4.   

    MARK一下···学习咯··android有钱途!
      

  5.   

    高手如云啊。正在学习android开发中。
      

  6.   

    - -,
    首先你得重写onTouchEvent是必须的然后使用一个
    定义private ArrayList<PointF> pinfs = new ArrayList<PointF>();来存所以的点
    在onTouchEvent中
      
    Java code
    switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                     pinfs.add(new PointF(event.getX(),event.getY()));
                        break;
                    case MotionEvent.ACTION_MOVE:
                       pinfs.add(new PointF(event.getX(),event.getY()));
                        break;
                    case MotionEvent.ACTION_UP:
                        invalidate();
                        break;
                }然后在    @Override
            protected void onDraw(Canvas canvas) {
                for (PointF point : pinfs) {
                  这里绘制人物移动
                }
     
            }
      

  7.   

    Gallery里移动大图片一样的功能吧。
    楼住的触摸屏是支持多点触摸吗?
      

  8.   

    谁能讲一下 mPath.quadTo(mX, mY, (x + mX)/2, (y + mY)/2);的用法吗?
      

  9.   

    请问一下如果我要把这个功能应用于MapView,需要如何修改呢?
      

  10.   

    看着讨论这么火,Android,很憧憬啊
      

  11.   

    谁能把这个图片按手势移动的工程发我下啊  我刚学android想试试效果  可以给他40份 多谢啊  
      

  12.   

    源码有错误,能不能把工程发下我啊,感激不尽,[email protected]