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 图示五个参数的模型校正是用什么方法做出来的。如何建立其他模型
  • ¥100 描述一下元器件的基本功能,pcba板的基本原理
  • ¥15 STM32无法向设备写入固件
  • ¥15 使用ESP8266连接阿里云出现问题
  • ¥15 BP神经网络控制倒立摆
  • ¥20 要这个数学建模编程的代码 并且能完整允许出来结果 完整的过程和数据的结果
  • ¥15 html5+css和javascript有人可以帮吗?图片要怎么插入代码里面啊
  • ¥30 Unity接入微信SDK 无法开启摄像头
  • ¥20 有偿 写代码 要用特定的软件anaconda 里的jvpyter 用python3写
  • ¥20 cad图纸,chx-3六轴码垛机器人