ontouch イベントからのポイントを使用して、キャンバス上に四角形を描画する必要があります。長方形の形状が機能するようになりましたが、別の長方形を描画すると、前の長方形が消えます。長方形の点を配列に格納する必要があると思います。私にいくつかのアイデアを提案してください。
これまでのところ、私のコードは次のとおりです。
ビュー クラスの ontouch メソッドで最初に
private void onTouchEvent(MotionEvent event) {
xTouchCoordinate = event.getX();
yTouchCoordinate = event.getY();
if (event.getAction() == MotionEvent.ACTION_DOWN) {
isActionUp = false;
pushState ();
startX = event.getX();
startY = event.getY();
}
else if (event.getAction() == MotionEvent.ACTION_UP) {
isActionUp = true;
}
else if (event.getAction() == MotionEvent.ACTION_MOVE){
isActionUp = false;
if(mTouchMode == TouchModes.RECTANGLE )
{
updateRectPath(startX,startY , xTouchCoordinate , yTouchCoordinate);
}
}
}
そして onDraw メソッドは
protected void onDraw(Canvas canvas) {
ImageObject.setInteractiveMode(true);
int sc = canvas.save();
canvas.drawColor(Color.BLACK);
canvas.scale(mCanvasScale, mCanvasScale);
canvas.translate(mCanvasOffset.x, mCanvasOffset.y);
canvas.clipRect(mCanvasLimits);
canvas.drawColor(Color.WHITE);
if (currentState.drawGrid)
drawGridLines (canvas);
drawImages (canvas, true);
drawLines (canvas);
drawRectangles(canvas);
drawCircles(canvas);
drawOvals(canvas);
drawImages (canvas, false);
}
DrawRectangles メソッド
private void drawRectangles(Canvas canvas) {
try
{
if(path!=null)
{
if(mTouchMode == TouchModes.RECTANGLE)
{
finishPath(canvas);
}
}
}catch(Exception e)
{
}
}
finishpath メソッド
void finishPath(Canvas canvas) {
if(mTouchMode == TouchModes.RECTANGLE)
{
paint = new Paint();
paint.setAntiAlias(true);
paint.setDither(true);
paint.setStyle(Paint.Style.STROKE);
paint.setColor(currentState.currentColor);
paint.setFlags(Paint.DITHER_FLAG | Paint.ANTI_ALIAS_FLAG);
paint.setStrokeJoin(Paint.Join.ROUND);
paint.setStrokeCap(Paint.Cap.ROUND);
paint.setStrokeWidth(currentStrokeWidth);
canvas.drawPath(path, paint);
}
}
void updateRectPath(float x1, float y1, float x2, float y2) {
path.rewind();
x1 = x1 - mCanvasOffset.x;
y1 = y1 - mCanvasOffset.y;
x2 = x2 - mCanvasOffset.x;
y2 = y2 - mCanvasOffset.y;
translate(x1, y1);
Log.d ("x1 is "+x1, "y1 is "+y1);
if (x1 < x2 && y1 > y2) {
path.addRect(x1, y2, x2, y1, Path.Direction.CW);
}
if (x1 < x2 && y1 < y2) {
path.addRect(x1, y1, x2, y2, Path.Direction.CW);
}
if (x1 > x2 && y1 > y2) {
path.addRect(x2, y2, x1, y1, Path.Direction.CW);
}
if (x1 > x2 && y1 < y2) {
path.addRect(x2, y1, x1, y2, Path.Direction.CW);
}
}