zoukankan      html  css  js  c++  java
  • (转)android图片根据手势路线进行移动

    做游戏的时候遇到的问题,在CSDN问的,有人提供了好的方法,记录一下。

    用手指画一条路线,然后图跟着路线移动。

    import java.util.ArrayList;

    import android.content.Context;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.graphics.Path;
    import android.graphics.PointF;
    import android.view.MotionEvent;
    import android.view.View;

    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); // 画笔划线的宽度,设为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();
                }
            }
        }
    }

    原文地址:http://topic.csdn.net/u/20110821/11/2bcab963-401a-44ae-9dab-cb9a543d2c22.html

  • 相关阅读:
    计算机二级Python
    vivado三人表决仿真
    verilog设计加法器
    超前进位加法器
    OO第二单元总结
    OO第一单元总结
    第一次阅读作业
    安卓计算器
    安卓第四周作业
    第十四周作业
  • 原文地址:https://www.cnblogs.com/xingmeng/p/2441852.html
Copyright © 2011-2022 走看看