diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintActivity.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintActivity.java index 57741c6..c262372 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintActivity.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintActivity.java @@ -19,6 +19,7 @@ import org.ntlab.acanthus_client.entities.Position; import org.ntlab.acanthus_client.entities.Stroke; +import java.util.ArrayList; import java.util.Collection; //----------------------------------------------------------------- @@ -30,7 +31,8 @@ private PaintScreenShot paintScreenShot; private ActivityPaintBinding binding; private PaintViewModel paintViewModel; - + private int laststrokesize=0; + private float lastpositionx=0; private boolean buttonView = false; //----------------------------------------------------------------- @@ -135,21 +137,30 @@ paintViewModel.getStroke().observe(this, new Observer>() { @Override public void onChanged(Collection strokes) { - paintCanvas.getCanvas(); + ArrayList s = new ArrayList<>(strokes); + paintCanvas.getCanvas(strokes); + try{ + lastpositionx = s.get(s.size()-1).getPositions().get(s.get(s.size()-1).getPositions().size()-1).getX(); + }catch (ArrayIndexOutOfBoundsException ex){ } } }); //1時的コメントアウトここから - // paintViewModel.getmStrokeNo().observe(this, new Observer() { -// @Override -// public void onChanged(Integer integer) { -// paintViewModel.getPosition(integer); -// } -// }); + paintViewModel.getmStrokeNo().observe(this, new Observer() { + @Override + public void onChanged(Integer integer) { + if(laststrokesize!=integer || lastpositionx != -1) { + paintViewModel.getStrokes(); + laststrokesize=integer; + } + //paintViewModel.getPosition(integer); + } + }); // paintViewModel.getMlatestPosition().observe(this, new Observer>() { // @Override // public void onChanged(Collection positions) { -// if(positions.size()!=1){ -// //paintCanvas.latestPositionWrite(positions); +// if((positions.size()!=1) && (positions.size()!=lastpositionsize)){ +// paintCanvas.latestPositionWrite(positions); +// lastpositionsize=positions.size(); // } // } // }); 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 f6eb21b..505cf77 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 @@ -49,7 +49,8 @@ private int curoldw; private int curoldh; private Pen pen; - private Stroke laststroke = new Stroke(); + private int laststrokeNo = 0; + private int lastposition = 0; //----------------------------------------------------------------- @@ -110,7 +111,7 @@ canvas.drawColor(0xFFFFFFFF); paint.setColor(Color.argb(pen.getAlpha(), pen.getRed(), pen.getGreen(), pen.getBlue())); paint.setStrokeWidth(pen.getThickness()); - for (int i = 0; i < clonepaths.toArray().length; i++) { + for (int i = 0; i < paths.toArray().length; i++) { try { canvas.drawPath(paths.get(i), paints.get(i)); curCanvas.drawPath(paths.get(i), paints.get(i)); @@ -274,16 +275,16 @@ //描写するための取得 - public void getCanvas() { + public void getCanvas(Collection strokes) { + ArrayList liststrokes = new ArrayList<>(strokes); int cnt = 0; - int lastStroke = 0; - if (lastStroke != paintViewModel.getStroke().getValue().size()) { - clonepath.reset(); + clonepath.reset(); + if (laststrokeNo == 0) { //clonepaint.reset(); clonepaints.clear(); clonepaths.clear(); invalidate(); - for (Stroke s : paintViewModel.getStroke().getValue()) { + for (Stroke s : strokes) { clonepaint = new Paint(); clonepath = new Path(); clonepaint.setColor(Color.argb(Color.alpha(s.getColor()), Color.red(s.getColor()), Color.green(s.getColor()), Color.blue(s.getColor())));//色の指定 @@ -291,7 +292,6 @@ clonepaint.setStyle(Paint.Style.STROKE);//線をひく clonepaints.add(clonepaint); clonepaths.add(clonepath); - laststroke = s; for (Position p : s.getPositions()) { if (cnt == 0) { onTouched2(p.getX(), p.getY()); @@ -306,44 +306,61 @@ } cnt = 0; } - lastStroke = paintViewModel.getStroke().getValue().size(); + laststrokeNo = strokes.size(); } else { - clonepath.reset(); - for (Position p : laststroke.getPositions()) { + for (int i = clonepaints.size()-1; i <=liststrokes.size(); i++) { + latestPositionWrite(liststrokes.get(i - 1), i); + } + } + + } + + //paintViewModel.deleteStroke(); + //最新の筆跡を取得して描画 + public void latestPositionWrite(Stroke s, int size) { + Collection positions = s.getPositions(); + int cnt = 0; + clonepath.reset(); + invalidate(); + for (Position p : positions) { + if (lastposition < size) { + clonepaint = new Paint(); + clonepath = new Path(); + clonepaint.setColor(Color.argb(Color.alpha(s.getColor()), Color.red(s.getColor()), Color.green(s.getColor()), Color.blue(s.getColor())));//色の指定 + clonepaint.setStrokeWidth(s.getThickness()); + clonepaint.setStyle(Paint.Style.STROKE);//線をひく + clonepaints.add(clonepaint); + clonepaths.add(clonepath); + lastposition = size; if (cnt == 0) { onTouched2(p.getX(), p.getY()); } else { if (p.getX() == -1) { - + } else { + onTouchedMove2(p.getX(), p.getY()); + } + } + cnt++; + } else if (lastposition == size) { + clonepaths.get(clonepaths.size() - 1).reset(); + //clonepaints.get(clonepaints.size() - 1).reset(); + //clonepaint = new Paint(); + clonepath = new Path(); + //clonepaint.setColor(Color.argb(Color.alpha(s.getColor()), Color.red(s.getColor()), Color.green(s.getColor()), Color.blue(s.getColor())));//色の指定 + //clonepaint.setStrokeWidth(s.getThickness()); + //clonepaint.setStyle(Paint.Style.STROKE);//線をひく + //clonepaints.add(clonepaint); + clonepaths.add(clonepath); + if (cnt == 0) { + onTouched2(p.getX(), p.getY()); + } else { + if (p.getX() == -1) { } else { onTouchedMove2(p.getX(), p.getY()); } } cnt++; } - cnt = 0; } } - //paintViewModel.deleteStroke(); - //最新の筆跡を取得して描画 -// public void latestPositionWrite(Collection positions){ -// int cnt = 0; -// latestpath.reset(); -// invalidate(); -// for(Position p: positions){ -// Log.d("", "latestPositionWrite: "+positions.size()); -// Log.d("", "latestPositionWrite: cnt"+cnt); -// if (cnt == 0) { -// //latestOnTouched(p.getX(), p.getY()); -// Log.d("", "latestPositionWrite: "+p.getX()+","+ p.getY()); -// } else { -// if (p.getX() == -1) { -// } else { -// //latestOnTouchedMove(p.getX(), p.getY()); -// } -// } -// cnt++; -// } -// paintViewModel.deletePosition(); -// } } \ No newline at end of file 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 d5a1cb6..9be59ad 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 @@ -74,7 +74,8 @@ paintModelContainer.getPageConnectionModel().getPage(mCurPageId); paintModelContainer.getPageConnectionModel().getPageSize(mPageSize); - thread.scheduleWithFixedDelay(this, 50L, 100L, TimeUnit.MILLISECONDS); + thread.scheduleWithFixedDelay(this, 5L, 100L, TimeUnit.MILLISECONDS); + getStrokes(); //thread.scheduleWithFixedDelay(this::latestStrokeNo, 50L, 50L, TimeUnit.MILLISECONDS); } @@ -204,17 +205,20 @@ //Log.d("debug", "run: "+mlatestPosition.getValue()); } + //最新のStrokePositionを取得 + public void getStrokes(){ + paintModelContainer.getPaintConnectionModel().getStrokes(mStrokes); + //Log.d("debug", "run: "+mlatestPosition.getValue()); + } + //----------------------------------------------------------------- //----------------------------------------------------------------- // 一定間隔でサーバー上の筆跡を取得する(GET) @Override public void run() { - paintModelContainer.getPaintConnectionModel().getStrokes(mStrokes); - paintModelContainer.getPageConnectionModel().getPageSize(mPageSize); - } - //一定間隔でserver上のStrokeNoSizeを返す - public void latestStrokeNo(){ + //一定間隔でserver上のStrokeNoSizeを返す paintModelContainer.getPaintConnectionModel().getStrokeNo(mStrokeNo); + paintModelContainer.getPageConnectionModel().getPageSize(mPageSize); } //-----------------------------------------------------------------