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 c262372..9ac8c19 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 @@ -138,7 +138,7 @@ @Override public void onChanged(Collection strokes) { ArrayList s = new ArrayList<>(strokes); - paintCanvas.getCanvas(strokes); + if(s.size()!=0) paintCanvas.getCanvas(strokes); try{ lastpositionx = s.get(s.size()-1).getPositions().get(s.get(s.size()-1).getPositions().size()-1).getX(); }catch (ArrayIndexOutOfBoundsException ex){ } @@ -148,10 +148,10 @@ paintViewModel.getmStrokeNo().observe(this, new Observer() { @Override public void onChanged(Integer integer) { - if(laststrokesize!=integer || lastpositionx != -1) { +// if(laststrokesize!=integer || lastpositionx != -1) { paintViewModel.getStrokes(); laststrokesize=integer; - } + //} //paintViewModel.getPosition(integer); } }); 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 e14a486..ddd8b88 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 @@ -7,6 +7,7 @@ import android.graphics.Paint; import android.graphics.Path; import android.os.Build; +import android.os.Handler; import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; @@ -49,8 +50,24 @@ private int curoldw; private int curoldh; private Pen pen; - private int laststrokeNo = 0; + private int laststrokeNo = 1; private int lastposition = 0; + private Handler handler = new Handler(); + private Runnable runnable = new Runnable() { + @Override + public void run() { + paths.clear(); + path.reset(); + paints.clear(); + 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); + invalidate(); + } + }; //----------------------------------------------------------------- @@ -111,16 +128,17 @@ canvas.drawColor(0xFFFFFFFF); paint.setColor(Color.argb(pen.getAlpha(), pen.getRed(), pen.getGreen(), pen.getBlue())); paint.setStrokeWidth(pen.getThickness()); - for (int i = 0; i < paths.toArray().length; i++) { + int max=Math.max(clonepaths.size(),paths.size()); + for (int i = 0; i < max; i++) { try { - canvas.drawPath(paths.get(i), paints.get(i)); - curCanvas.drawPath(paths.get(i), paints.get(i)); + // canvas.drawPath(clonepaths.get(i), clonepaints.get(i)); + // curCanvas.drawPath(clonepaths.get(i), clonepaints.get(i)); } catch (IndexOutOfBoundsException ex) { } try { - canvas.drawPath(clonepaths.get(i), clonepaints.get(i)); - curCanvas.drawPath(clonepaths.get(i), clonepaints.get(i)); + canvas.drawPath(paths.get(i), paints.get(i)); + curCanvas.drawPath(paths.get(i), paints.get(i)); } catch (IndexOutOfBoundsException ex) { } @@ -145,6 +163,7 @@ paintViewModel.setmStrokeNo(); paintViewModel.addLocalStrokeRequest(x, y, Color.argb(pen.getAlpha(), pen.getRed(), pen.getGreen(), pen.getBlue()), pen.getThickness()); //paintViewModel.addPositionLocal(x, y); + handler.removeCallbacks(runnable); break; case MotionEvent.ACTION_MOVE: @@ -162,6 +181,7 @@ paint.setStyle(Paint.Style.STROKE);//線をひく paths.add(path); paints.add(paint); + handler.postDelayed(runnable, 10000); break; } @@ -179,6 +199,12 @@ clonepaths.clear(); clonepaints.clear(); clonepath.reset(); + 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); invalidate(); //clonepath.reset(); //latestpath.reset(); @@ -279,8 +305,8 @@ ArrayList liststrokes = new ArrayList<>(strokes); int cnt = 0; clonepath.reset(); - if (laststrokeNo == 0) { - //clonepaint.reset(); + if (laststrokeNo < 5) { + clonepaint.reset(); clonepaints.clear(); clonepaths.clear(); invalidate(); @@ -306,50 +332,45 @@ } cnt = 0; } - laststrokeNo = strokes.size(); + laststrokeNo++; + lastposition = strokes.size(); } else { - for (int i = clonepaints.size()-1; i <=liststrokes.size(); i++) { - latestPositionWrite(liststrokes.get(i - 1), i); + for (int i = clonepaths.size(); i <=liststrokes.size(); i++) { + try { + latestPositionWrite(liststrokes.get(i-1),i); + }catch (ArrayIndexOutOfBoundsException e){ + + } } - } + } } //paintViewModel.deleteStroke(); //最新の筆跡を取得して描画 - public void latestPositionWrite(Stroke s, int size) { + public void latestPositionWrite(Stroke s ,int size) { Collection positions = s.getPositions(); + ArrayList listpositions= new ArrayList<>(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 (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; + } else{ + clonepaths.get(clonepaths.size()-1).reset(); + //clonepaints.get(clonepaints.size() - 1).reset(); + //clonepaint = new Paint(); + clonepaths.set(clonepaths.size()-1,clonepath); + //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); + } + for (Position p : positions) { if (cnt == 0) { onTouched2(p.getX(), p.getY()); } else { @@ -360,6 +381,8 @@ } cnt++; } - } + } + public void stop() { + thread.shutdown(); } } \ No newline at end of file