如何允许用户在Android上用手指画图和绘制几何图形?

如何允许用户在Android上用手指画图和绘制几何图形?,android,Android,我有一个名为DrawingView的类,其中我有一个方法onTouchEvent(MotionEvent事件)用于响应触摸事件。在这个方法中,我允许用户在自由模式下绘图,用户只需触摸屏幕即可自由绘图。 但问题是,我想允许用户绘制几何图形,但这也取决于onTouchEvent()方法 以下是该方法的代码: @Override public boolean onTouchEvent(MotionEvent event) { float touchX = event.getX(); f

我有一个名为DrawingView的类,其中我有一个方法
onTouchEvent(MotionEvent事件)
用于响应触摸事件。在这个方法中,我允许用户在自由模式下绘图,用户只需触摸屏幕即可自由绘图。 但问题是,我想允许用户绘制几何图形,但这也取决于
onTouchEvent()
方法

以下是该方法的代码:

@Override
public boolean onTouchEvent(MotionEvent event) {
    float touchX = event.getX();
    float touchY = event.getY();

    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            drawPath.moveTo(touchX, touchY);
            break;
        case MotionEvent.ACTION_MOVE:
            drawPath.lineTo(touchX, touchY);
            break;
        case MotionEvent.ACTION_UP:
            drawCanvas.drawPath(drawPath, drawPaint);
            drawPath.reset();
            break;
        default:
            return false;
    }

    invalidate();
    return true;
}
现在,我想做一些类似于“”的事情,但是我不能改变这个方法来做这件事。 并且图形只需要停留在一个视图中


有什么方法可以让用户画出这样的东西?因为这两种类型的绘图取决于运动事件。

你需要使运动足够不同,以便在做错误的运动之前,你能分辨出它们试图做的是哪一种。例如,如果一个行为需要两个手指向下,而另一个行为需要一个手指向下,那么一旦他们开始移动第一个手指,你就可以假设他们正在做一个手指的行为


你没有给我们足够的信息来告诉你如何处理你的案子。我可以告诉您,您需要更改onTouchEvent,使其具有更多的逻辑—尝试多路复用触摸事件最终会在其中产生非常复杂的代码,通常最终会产生某种形式的状态机。

您可以在
位图上绘制,然后将其复制到
onDraw()
方法中的
画布上。为此,您可以创建如下类:

class GraphicsView extends View {
    private Bitmap buffCanvasBitmap = null;
    private Canvas buffCanvas = null;
    private float x = 0;
    private float y = 0;
    private float old_x = 0;
    private float old_y = 0;
    private Paint paint = new Paint();

    public GraphicsView(Context context) {
        super(context);
        paint.setColor(Color.BLUE);
        paint.setTextSize(20);
        paint.setAntiAlias(true);
    }

    @Override
    public void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        if (buffCanvasBitmap == null) {
            buffCanvasBitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_4444);
            buffCanvas = new Canvas(buffCanvasBitmap);
            buffCanvas.drawColor(Color.LTGRAY);
        }

        canvas.drawBitmap(buffCanvasBitmap, 0, 0, null);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event)  {
        old_x = x;
        old_y = y;

        x = event.getX();
        y = event.getY();

        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN: 
                break;
            case MotionEvent.ACTION_MOVE: 
                buffCanvas.drawLine(old_x, old_y, x, y, paint);
                break;
            case MotionEvent.ACTION_UP: 
            case MotionEvent.ACTION_CANCEL:
                break;
        }
        invalidate();
        return true;
    }
}
然后使用它,例如,在您的
活动中
,方法如下:

public GraphicsView gv;
...

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);

    gv = new GraphicsView(this);
    setContentView(gv);
}
你们可以直接在屏幕上画画