diff --git a/app/src/main/java/org/ntlab/acanthus_client/entities/Position.java b/app/src/main/java/org/ntlab/acanthus_client/entities/Position.java index f311050..fc77782 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/entities/Position.java +++ b/app/src/main/java/org/ntlab/acanthus_client/entities/Position.java @@ -2,7 +2,7 @@ //----------------------------------------------------------------- // ペン座標 -public class Position implements Comparable { +public class Position { private int i; private Float x; private Float y; @@ -31,15 +31,4 @@ //----------------------------------------------------------------- // - @Override - public int compareTo(Object o) { - if (o instanceof Position) { - if (i < ((Position) o).i) { - return -1; - } else if (i > ((Position) o).i) { - return 1; - } - } - return 0; - } } diff --git a/app/src/main/java/org/ntlab/acanthus_client/entities/Stroke.java b/app/src/main/java/org/ntlab/acanthus_client/entities/Stroke.java index da661cb..1d97c24 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/entities/Stroke.java +++ b/app/src/main/java/org/ntlab/acanthus_client/entities/Stroke.java @@ -1,6 +1,7 @@ package org.ntlab.acanthus_client.entities; import java.util.ArrayList; +import java.util.List; import java.util.SortedSet; import java.util.TreeSet; @@ -12,7 +13,7 @@ private int pen; private int color; private int thickness; - private SortedSet positions = new TreeSet<>(); + private List positions = new ArrayList<>(); public int getStrokeNo() { return this.strokeNo; @@ -26,7 +27,7 @@ public int getThickness() { return this.thickness; } - public SortedSet getPositions() { + public List getPositions() { return this.positions; } } diff --git a/app/src/main/java/org/ntlab/acanthus_client/resources/gallery/StrokesRest.java b/app/src/main/java/org/ntlab/acanthus_client/resources/gallery/StrokesRest.java index 8f5da61..899c755 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/resources/gallery/StrokesRest.java +++ b/app/src/main/java/org/ntlab/acanthus_client/resources/gallery/StrokesRest.java @@ -45,7 +45,7 @@ // @FormUrlEncoded @POST("gallery/{aid}/pageMap/{pid}/layers/0/strokes/{strokeNo}/positions") - Call addPositions(@Field("positionNo") int i, @Path("aid") Integer aid, + Call addPositions(@Field("positionNo") int i, @Path("aid") Integer aid, @Path("pid") int pid, @Path("strokeNo") Integer strokeNo, @Field("x") double x, @Field("y") double y); diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintCanvas.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintCanvas.java index b4cf4f9..8027d98 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintCanvas.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintCanvas.java @@ -17,6 +17,7 @@ import org.ntlab.acanthus_client.entities.Stroke; import java.io.ByteArrayOutputStream; +import java.util.ArrayList; import java.util.Base64; import java.util.Collection; import java.util.concurrent.ScheduledThreadPoolExecutor; @@ -27,7 +28,7 @@ //----------------------------------------------------------------- // 描画キャンバスの本体 -public class PaintCanvas extends View { +public class PaintCanvas extends View { private Path path; private Path clonepath; @@ -35,6 +36,10 @@ private Paint paint; private Paint clonepaint; private Paint latestpaint; + private ArrayList paints = new ArrayList<>(); + private ArrayList paths = new ArrayList<>(); + private ArrayList clonepaints = new ArrayList<>(); + private ArrayList clonepaths = new ArrayList<>(); private PaintViewModel paintViewModel; private ScheduledThreadPoolExecutor thread = new ScheduledThreadPoolExecutor(1); private Canvas curCanvas; @@ -51,15 +56,19 @@ public PaintCanvas(Context context, @Nullable AttributeSet attrs) { super(context, attrs); - pen = new Pen(255,0,0,0,20); + pen = new Pen(255, 0, 0, 0, 20); //pen =new Pen(Color.BLACK,20);//新しくPenクラスを作り色と幅の値を設定 path = new Path(); // 図形描画 + paths.add(path); + /// clonepath = new Path(); // 図形描画 latestpath = new Path(); // 図形描画 paint = new Paint();//筆の種類 + paints.add(paint); + /// clonepaint = new Paint();//筆の種類 latestpaint = new Paint();//筆の種類 - paint.setColor(Color.argb(pen.getAlpha(),pen.getRed(),pen.getGreen(),pen.getBlue()));//色の指定 + paint.setColor(Color.argb(pen.getAlpha(), pen.getRed(), pen.getGreen(), pen.getBlue()));//色の指定 paint.setStyle(Paint.Style.STROKE);//線をひく paint.setStrokeWidth(pen.getThickness());//幅 clonepaint.setColor(Color.RED);//色の指定 @@ -81,7 +90,9 @@ return curCanvas; } - public Pen getPen(){return pen;} + public Pen getPen() { + return pen; + } //----------------------------------------------------------------- // setter @@ -95,19 +106,26 @@ @Override protected void onDraw(Canvas canvas) { super.onDraw(curCanvas); - //canvas.setBitmap(image); - //curCanvas = canvas; -// paint.setColor(pen.getColor()); -// paint.setStrokeWidth(pen.getThickness()); - paint.setColor(Color.argb(pen.getAlpha(),pen.getRed(),pen.getGreen(),pen.getBlue())); + canvas.drawColor(0xFFFFFFFF); + paint.setColor(Color.argb(pen.getAlpha(), pen.getRed(), pen.getGreen(), pen.getBlue())); paint.setStrokeWidth(pen.getThickness()); - canvas.drawPath(path, paint); - canvas.drawPath(clonepath, clonepaint); - canvas.drawPath(latestpath,latestpaint); - curCanvas.drawPath(path, paint); - curCanvas.drawPath(clonepath, clonepaint); - curCanvas.drawPath(latestpath,latestpaint); + for (int i = 0; i < clonepaths.toArray().length; i++) { + try { + canvas.drawPath(paths.get(i), paints.get(i)); + curCanvas.drawPath(paths.get(i), paints.get(i)); + } catch (IndexOutOfBoundsException ex) { + + } + try { + canvas.drawPath(clonepaths.get(i), clonepaints.get(i)); + curCanvas.drawPath(clonepaths.get(i), clonepaints.get(i)); + } catch (IndexOutOfBoundsException ex) { + + } + } } + //canvas.drawPath(clonepath, clonepaint); + //curCanvas.drawPath(clonepath, clonepaint); //----------------------------------------------------------------- // 描画操作 (条件分岐:押したとき、動かしたとき、放した時) @@ -123,7 +141,7 @@ Log.d("motion", "+++++++++++++++++++++++++++++++++++++++down======================================================"); onTouched(x, y); paintViewModel.setmStrokeNo(); - paintViewModel.addLocalStrokeRequest(x, y); + paintViewModel.addLocalStrokeRequest(x, y, Color.argb(pen.getAlpha(), pen.getRed(), pen.getGreen(), pen.getBlue()), pen.getThickness()); //paintViewModel.addPositionLocal(x, y); break; @@ -136,6 +154,12 @@ case MotionEvent.ACTION_UP: Log.d("motion", "=====================================up======================================================"); paintViewModel.addPositionRequestFirst(); + path = new Path(); + paint = new Paint(); + paint.setColor(Color.argb(pen.getAlpha(), pen.getRed(), pen.getGreen(), pen.getBlue()));//色の指定 + paint.setStyle(Paint.Style.STROKE);//線をひく + paths.add(path); + paints.add(paint); break; } @@ -146,10 +170,14 @@ //----------------------------------------------------------------- // 描画クリア public void clearCanvas() { - paintViewModel.deleteStrokesRequest(); + //paintViewModel.deleteStrokesRequest(); + for (int i = 0; i < paths.toArray().length; i++) { + paths.get(i).reset(); + //paints.clear(); + } path.reset(); - clonepath.reset(); - latestpath.reset(); + //clonepath.reset(); + //latestpath.reset(); invalidate(); } @@ -206,37 +234,35 @@ image.compress(Bitmap.CompressFormat.PNG, 100, stream); byte[] byteArray = stream.toByteArray(); String encode = Base64.getEncoder().encodeToString(byteArray); - paintViewModel.setImage(encode); - Log.d("motion", "=====================================up======================================================"); Log.d("motion", "=====================================up======================================================"); - int stringcnt=0; - int last=0; - for(int i = 0; i positions){ diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintViewModel.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintViewModel.java index 4f841ab..d5a1cb6 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintViewModel.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintViewModel.java @@ -88,8 +88,8 @@ //----------------------------------------------------------------- // 描画APIの通信リクエスト - public void addLocalStrokeRequest(float x, float y) { - paintModelContainer.getPaintConnectionModel().addLocalStroke(strokeNo); + public void addLocalStrokeRequest(float x, float y , int color,int shick) { + paintModelContainer.getPaintConnectionModel().addLocalStroke(strokeNo,color,shick); fsx = x; fsy = y; cnt = 1; diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/PaintConnectionModel.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/PaintConnectionModel.java index 60caa1e..2db430c 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/PaintConnectionModel.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/PaintConnectionModel.java @@ -1,5 +1,6 @@ package org.ntlab.acanthus_client.views.paint.models; +import android.graphics.Color; import android.util.Log; import android.view.VelocityTracker; @@ -61,7 +62,7 @@ //----------------------------------------------------------------- // ローカルでのストロークの追加(POST) - public void addLocalStroke(int mStrokeNo) { + public void addLocalStroke(int mStrokeNo,int color,int shick) { final StrokesRest strokesRest = retrofit.create(StrokesRest.class); Log.d("strokeNo:", "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^add----------------------"); @@ -69,7 +70,7 @@ // ストローク追加API Call call = strokesRest.addStroke( acanthus.getAid(), acanthus.getEditingPageId(), 0, acanthus.getPreferenceUid(),mStrokeNo, acanthus.getPreferenceToken(), - 0, 0, 10); + 0, color, shick); // strokeNoを更新 call.enqueue(new Callback() { @@ -96,15 +97,15 @@ //----------------------------------------------------------------- // 座標追加 - Call call = strokesRest.addPositions(i, acanthus.getAid(), acanthus.getEditingPageId(), currentStrokeNo, x, y); - call.enqueue(new Callback() { + Call call = strokesRest.addPositions(i, acanthus.getAid(), acanthus.getEditingPageId(), currentStrokeNo, x, y); + call.enqueue(new Callback() { @Override - public void onResponse(Call call, Response response) { - + public void onResponse(Call call, Response response) { + Log.d("POSTsuccess: ", "i:" + i + ",x:" + x + ",y:" + y); } @Override - public void onFailure(Call call, Throwable t) { + public void onFailure(Call call, Throwable t) { Log.d("POSTonFailure: ", "i:" + i + ",x:" + x + ",y:" + y); } });