[英]How to draw a rectangle in java for android?
我正在嘗試做一個非常簡單的繪圖程序,您可以在屏幕上移動手指來繪制線條,現在我也想使該程序也繪制一個矩形。 我想創建兩個菜單項,這些菜單項確定了我目前正在繪制的內容。 程序啟動時,它應該允許我自由繪制,但是當我單擊第二個菜單按鈕時,我應該能夠繪制一個矩形。 意思是,當我拖動手指時,程序會從起點到手指拖動的位置繪制一個矩形。 拖動/繪制矩形時,它應始終顯示矩形。
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);
}
我有這段代碼,這使我可以自由繪制。 但是我不知道,當我單擊另一個菜單項時如何更改正在繪制的內容。 希望你理解我的問題:)
編輯:使此菜單選擇起作用,現在,如果有人可以教我如何繪制矩形,那就太好了;)
在CanvasView中,創建一個公共枚舉DrawMode {FreeDrawMode,RectDrawMode};
然后創建一個私有的DrawMode currentDrawMode;
然后是一個setter方法:
public void setDrawMode(DrawMode newDrawMode) {
this.currentDrawMode = newDrawMode;
}
然后,在MainActivity中,當用戶單擊菜單項以更改繪制方式時,只需傳入用戶選擇的CanvasView.DrawMode設置即可。
請注意,在CanvasView類內創建一個公共枚舉DrawMode將需要您在CanvasView.java類之外的任何地方將其引用為“ CanvasView.DrawMode.FreeDrawMode”而不是“ DrawMode.FreeDrawMode”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.