毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> 移动平台 >> 正文

android图片按手势进行移动源代码

更新时间:2012-11-15:  来源:毕业论文

正在做一个游戏,其中要用到用手滑动一个路线,手抬起后,人物图片按此路线移动过去

一般思路是先做人物两点件移动,手滑动时记录划过的坐标点组成一个点的集合(可以设采样间隔不用记录每个点,间隔越小人物移动的越平滑),再循环取集合内相邻的两点做人物移动。

首先你得重写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) {               这里绘制人物移动             }            } 


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();                 }             }         }     }

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。