我正在尝试做一个非常简单的绘图程序,你可以通过在屏幕上移动手指来绘制线条,现在我想让程序绘制一个矩形。我想创建两个菜单项,确定我当前绘制的内容。当程序启动时,它应该允许我自由绘制,但是当我单击第二个菜单按钮时,我应该能够绘制一个矩形。通过这个,我的意思是当我拖动我的手指时,程序从起点绘制一个矩形到我的手指被拖动的点。在拖动/绘制时,它应始终显示矩形。
CanvasView.java
package com.example.androiddrawing;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Point;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
public class CanvasView extends View {
private Paint paint = new Paint();
private Paint paint2 = new Paint();
private Path path = new Path();
private Point point = new Point();
private static List<Path> lines = new ArrayList<Path>();
private static List<Point> points = new ArrayList<Point>();
private float x;
private float y;
private boolean touchStarted = false;
public CanvasView(Context context, AttributeSet attrs) {
super(context, attrs);
paint.setAntiAlias(true);
paint.setStrokeWidth(5);
paint.setColor(Color.BLACK);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeJoin(Paint.Join.ROUND);
paint2.setAntiAlias(true);
paint2.setStrokeWidth(5);
paint2.setColor(Color.RED);
paint2.setStyle(Paint.Style.STROKE);
paint2.setStrokeJoin(Paint.Join.ROUND);
}
@Override
protected void onDraw(Canvas canvas) {
for (Path p: lines)
canvas.drawPath(p, paint);
canvas.drawPath(path, paint2);
for (Point point: points)
canvas.drawCircle(point.x, point.y, 1 , paint);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
x = event.getX();
y = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// Set a new starting point
paint2.setColor(Color.RED);
path = new Path();
path.moveTo(x, y);
touchStarted = true;
break;
//return true;
case MotionEvent.ACTION_MOVE:
// Connect the points
touchStarted = false;
path.lineTo(x, y);
break;
case MotionEvent.ACTION_UP:
if(touchStarted){
point = new Point();
point.x =(int) x;
point.y = (int) y;
paint2.setColor(Color.BLACK);
points.add(point);
touchStarted = false;
System.out.println("siin");
} else {
System.out.println("seal");
paint2.setColor(Color.BLACK);
lines.add(path);
}
break;
default:
return false;
}
// Makes our view repaint and call onDraw
invalidate();
return true;
}
}
这是按下菜单项时的代码
MainActivity.java
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.default_drawing) {
drawMode = 1;
return true;
} else if (id == R.id.draw_rectangle) {
drawMode = 2;
return true;
}
return super.onOptionsItemSelected(item);
}
我有这个代码,这允许我自由绘制。但我不知道,当我点击另一个菜单项时,如何更改正在绘制的内容。希望你理解我的问题:)
编辑: 让这个菜单选择工作正常,现在如果有人可以教我如何画一个矩形,会很棒;)
答案 0 :(得分:0)
然后创建一个私有的DrawMode currentDrawMode;
然后是一个setter方法:
public void setDrawMode(DrawMode newDrawMode) {
this.currentDrawMode = newDrawMode;
}
然后,在您的MainActivity中,当用户单击菜单项以更改绘制模式时,只需传入用户选择的CanvasView.DrawMode设置。
请注意,在CanvasView类中创建公共枚举DrawMode将要求您从CanvasView.java类之外的任何位置将其引用为“CanvasView.DrawMode.FreeDrawMode”而不是“DrawMode.FreeDrawMode”。