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